Connect MCP clients to Thalovant control-plane and hub runtime APIs over stdio or Streamable HTTP.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Public-ready MCP server for Thalovant control-plane and hub runtime APIs.
It uses the official Thalovant Node.js SDK and the production MCP TypeScript SDK over stdio and Streamable HTTP, so it works with local MCP hosts such as Claude Desktop, Codex, Cursor, and remote MCP clients.
/mcp for remote agents./.well-known/oauth-protected-resource.server.json.Thalovant publishes SDKs for Python, Node.js, Go, and Rust. This server uses Node.js because @thalovant/sdk directly exposes the Thalovant control plane, identity loading, WSS/HTTPS/MQTT runtime clients, memory, analytics, and context helpers, while @modelcontextprotocol/sdk is the best-supported path for cross-agent stdio and Streamable HTTP servers.
Node.js 20 or newer is required.
Public hub discovery does not need Thalovant credentials. Private control-plane tools and runtime hub tools read credentials only from the MCP server environment or server-side principal credential files. Do not pass API tokens or passwords through chat or tool arguments.
The server selects control-plane auth in this order:
THALOVANT_API_TOKEN β a scoped Thalovant API token. Recommended.THALOVANT_ACCESS_TOKEN β a pre-issued session access token.THALOVANT_EMAIL + THALOVANT_PASSWORD β interactive-account login fallback.When a token is set, the server never calls the login endpoint. thalovant_config_status reports the active mode as controlPlaneAuthMode without revealing token values.
Scoped API tokens are the right credential for AI and automation use: they are minted from the Thalovant dashboard (or through the device flow), carry only the scopes you grant, can be revoked individually, and never involve your account password or MFA. Tokens start with tvpat_.
Minimum scopes for the full control-plane tool surface:
| Scope | Used by |
|---|---|
hubs:read | thalovant_list_hubs, thalovant_get_hub, thalovant_get_analytics_overview, thalovant_list_marketplace_skills, thalovant_list_runtime_groups, thalovant_get_runtime_group, thalovant_get_runtime_group_config, and the hub lookup inside thalovant_create_client_identity |
hubs:inspect | thalovant_get_hub_runtime_capabilities, thalovant_list_runtime_group_marketplace, thalovant_list_runtime_group_inventory |
hubs:write | All hub and runtime-group provisioning: thalovant_create_hub, thalovant_update_hub, thalovant_release_hub, thalovant_create_runtime_group, thalovant_update_runtime_group, thalovant_update_runtime_group_config, thalovant_release_runtime_group, thalovant_install_runtime_group_skill, thalovant_uninstall_runtime_group_skill, the hub rating tools, and the opt-in delete tools |
clients:write | thalovant_create_client_identity (POST /v1/clients) |
memory:read | thalovant_list_memory_items, thalovant_get_memory_summary, thalovant_get_memory_item |
memory:write | thalovant_create_memory_item, thalovant_update_memory_item, thalovant_delete_memory_item |
The hub scopes imply one another: hubs:write grants hubs:read, which grants hubs:inspect and hubs:preview. Minting a token with hubs:read is therefore enough for every discovery tool in the table above.
Scope is not the whole story for provisioning. Every hub and runtime-group write also requires a paid plan, and the API checks scope before the plan, so the two failure modes are ordered:
403 Insufficient scopes. Free-plan API tokens are capped at hubs:read, clients:read, and clients:write, so on the free tier provisioning fails with this 403 and never reaches the 402.402 API access requires a paid plan.thalovant_install_runtime_group_skill can fail with a second, distinct 402, This skill requires paid marketplace access for the tenant plan., when the plan is paid but does not include access_tier: paid catalog entries.Discovery is deliberately not paid-gated: a free-tier token can browse the marketplace catalog and set hub ratings, but cannot install skills or provision hubs. Use thalovant_list_runtime_group_marketplace before installing β it reports installable, purchase_required, and access_message per skill, which turns an opaque 402 into a decision you can make up front.
Grant fewer scopes for narrower deployments: a read-only assistant needs only hubs:read and memory:read, and a discovery-only agent that browses skills but never provisions needs hubs:read alone. thalovant_get_analytics_overview with admin: true additionally requires an admin account with admin:analytics, which API tokens for regular use should not carry. Runtime hub tools (thalovant_ask, thalovant_send_action, and friends) use Thalovant client identities, not control-plane tokens.
thalovant_update_hub and thalovant_delete_hub use optimistic locking and require the hub's current etag, sent as If-Match. The etag is only available in the body of the hub resource β the API sends no ETag response header β so an agent must call thalovant_get_hub first and pass the etag field from that response. A missing or stale value fails 412 ETag mismatch and changes nothing; re-fetch and retry. name, namespace, and domain are immutable after creation, so thalovant_update_hub does not accept them at all; send only the fields you are changing rather than round-tripping a whole hub resource. Runtime-group writes do not use etags.
If neither a token nor email/password is configured, authenticated control-plane tools fail with a clear error naming the supported options.
The server speaks MCP over stdio and does not write logs to stdout.
Runtime hub tools load local identities in this order:
identityFile tool argument.configPath or profile tool argument.Keep Thalovant identity files secret. The SDK expects protected config files such as ~/.config/thalovant/config.yaml with mode 0600.
Remote mode uses MCP Streamable HTTP at /mcp and requires bearer authentication by default.
Clients connect to:
Health checks are available at /healthz and /readyz.
For public deployments, set the public URL and exact host/origin allowlists:
Use static bearer tokens only for local, private, or single-tenant deployments:
Use JWT/JWKS for production resource-server validation:
Use introspection when your authorization server issues opaque tokens:
The server publishes protected resource metadata at:
401 responses include WWW-Authenticate with a resource_metadata pointer for MCP clients that support OAuth discovery.
For multi-user remote deployments, do not share one Thalovant access token across all MCP users. Map each authenticated MCP principal to its own Thalovant control-plane token, runtime identity, and tool policy.
Single file:
Directory mode:
Directory files are named <sha256(principal-id)>.json. The server checks the OAuth subject, principal id, and client id. See examples/principal-credentials.sample.json.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/thalovant-mcp)<a href="https://allmcps.com/mcp/thalovant-mcp"><img src="https://allmcps.com/api/badge/thalovant-mcp?style=directory" alt="Thalovant MCP on AllMCPs" /></a>