The Enterspeed Query MCP Server speaks plain MCP Streamable HTTP, so any MCP-capable client can use it. This page covers the four most common integrations; every other client follows one of the same two patterns — see Other MCP clients at the bottom.
You need the production endpoint in every case:
How you authenticate is a choice between two routes, and it decides what else you need:
- A scoped environment client key (
Query API + MCP Server at minimum), sent as an x-api-key header. The key names its own tenant and environment, and carries whatever index scope you gave it. See Creating a scoped key.
- Signing in with your Enterspeed account, over OAuth. Nothing to issue and nothing to store, but the session has to be told which tenant and environment to work in before any query tool runs.
Not every client can do both. A client that lets you set a custom HTTP header can use either; one that only takes a URL — such as Claude Desktop’s Connectors screen — can only sign you in.
Configure the root URL with the http transport type. There is no separate /sse endpoint — the server delivers its responses as a server-sent event stream on the root URL itself.
Pick your client
VS Code’s GitHub Copilot reads MCP servers from an mcp.json file. For a single workspace, put the config at .vscode/mcp.json; for every workspace, use the MCP: Open User Configuration command from the command palette.Reload the window (Developer: Reload Window from the command palette) and open the Copilot chat pane. The Enterspeed tools appear in the tool picker once Copilot connects.Never commit .vscode/mcp.json with a real key. Use ${input:enterspeed-key} with a matching inputs entry so VS Code prompts for the key on first use, or put the config in your user profile instead of the workspace. To sign in instead of using a key, leave out the -H line. Then start a session, run /mcp, pick enterspeed, and sign in with your Enterspeed credentials in the browser window that opens.The user scope (--scope user) installs the server for the current user across all projects. Use --scope project to install it for the current project only but for all users — that writes a checked-in .mcp.json, so use an environment variable for the key rather than pasting it.
Then start a session and ask Claude to list your indices:The CLI stores the server configuration under ~/.claude.json. Edit that file if you need to tweak the header or URL afterwards. Claude Desktop reaches the Enterspeed Query MCP Server in one of two ways. Which one you want depends on how you intend to authenticate.Route 1 — Connectors
Claude Desktop’s Connectors screen takes a remote MCP URL directly. There is no config file to edit and no key to paste.
- Open Settings → Connectors.
- Click Add custom connector.
- Give it a name — for example
Enterspeed Query — and enter the server URL:
- Click Add. A browser window opens. Sign in with your Enterspeed credentials.
- Back in Claude, pick the tenant and environment this session should work in — see the note below.
The Connectors screen cannot send an x-api-key header. It accepts a URL and authenticates by signing you in; there is no field for a custom header. If you have a scoped environment client key, this is not where it goes — use Route 2 instead.
A signed-in session starts without a tenant or environment, and no query tool works until you choose one. Signing in tells the server who you are, not which environment you mean, so get_indices and the query_* tools have nothing to run against until the session is pointed somewhere.A signed-in session is given three extra tools for this — list_available_contexts, select_context, and current_context. You do not have to call them by hand; just ask:
List my available Enterspeed contexts, then select the production environment.
If you belong to exactly one tenant with exactly one environment, asking Claude to select your context is enough — it resolves to the only one available.The first selection in an environment sets up an environment client for the sign-in route, and the first query needs a short wait after it. A selection can also need repeating after a reconnect. See what to expect from the sign-in route. Route 2 — Config file with a scoped key
claude_desktop_config.json starts local programs and talks to them over stdio. It has no remote transport, so a URL and a headers block in that file do not reach a remote server — you bridge to one instead.mcp-remote is that bridge: Claude Desktop launches it locally over stdio, and it opens the Streamable HTTP connection to Enterspeed with your header attached. This is the route that carries a scoped environment client key.Open your Claude Desktop config file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:
%APPDATA%\Claude\claude_desktop_config.json
You can also reach it from Settings → Developer → Edit Config.Add the mcpServers entry:If the file already has an mcpServers object, add the entry to it rather than replacing the file.Fully quit and relaunch Claude Desktop. The Enterspeed tools now appear in the tool picker.Two things to watch in that block:
- Node.js must be installed — the bridge runs through
npx.
- Write the header with no space after the colon (
x-api-key:environment-…). The value is passed through as one argument, and a space splits it.
If Claude Desktop connects but shows “no tools discovered”, the key is almost certainly missing the MCP Server scope. Create a new key using the AI Assistant preset.
This is the production path: a C# service opens an MCP session to the Enterspeed server, discovers the available tools, and runs a tool-use loop with Claude. The x-api-key header is set once on the MCP transport.Why not the inline mcp_servers feature? Anthropic’s inline remote-MCP connector forwards an Authorization: Bearer <token> header to the upstream MCP server and does not let you override the header name. The Enterspeed MCP server reads x-api-key. Driving the tool-use loop yourself (as below) works today and gives you full control over retries, logging, and cost.
Project setup
The loop uses two NuGet packages: Anthropic.SDK for the Messages API and ModelContextProtocol for the MCP session.Program.cs
Run it:Expected output includes a short summary of three blog posts, and the loop’s intermediate turns show Claude calling query_blog (or the equivalent per-index tool for whatever index the key is scoped to).SDK property names. The exact property names on ToolUseContent, ToolResultContent, and the Message / Tool shapes evolve with the Anthropic.SDK package. If a symbol above does not resolve, check the current release notes for the corresponding type name — the orchestration pattern (list tools once, loop until StopReason != "tool_use") stays the same.
Keeping costs under control
- Cache the tool list. Call
ListToolsAsync() once per session, not per request. The MCP server also caches per API key for 5 minutes, so repeat calls are cheap even if you do list more often.
- Narrow the tool set with an Index Scope. Fewer indices means fewer
query_* tools surfaced to Claude, which means fewer input tokens.
- Use prompt caching on the tool list. When you pass
tools to the Messages API, mark the list with cache_control: { type: "ephemeral" } via CacheControl-style helpers in Anthropic.SDK — see the package README for the current property name.
Other MCP clients
The four clients above are the ones we test against regularly, but the MCP server is client-agnostic. Any MCP-capable client follows one of the two routes — point it at https://mcp.query.enterspeed.com/ with http transport, and either set an x-api-key header or let the client sign you in with your Enterspeed account. Some known-good examples, all of which can set a header:
- Cursor —
.cursor/mcp.json, under mcpServers, with url and headers (Cursor uses mcpServers where VS Code uses servers).
- Windsurf — settings → Cascade → MCP Servers, using the URL + header form.
- Continue —
~/.continue/config.json under experimental.modelContextProtocolServers.
- Zed — settings under
"context_servers".
If your client does not support custom headers, you have two options. Add the server as a custom connector and sign in with your Enterspeed account, the way Claude Desktop’s Connectors route works — this is the better one, and it is what claude.ai in the browser uses. Failing that, pass the key as an ?apiKey= query-string parameter on the MCP URL. Avoid the query string in production: the key ends up in request logs along the whole path.
Signing in works on claude.ai in the browser too. Open Settings → Connectors, choose Add custom connector, and give it https://mcp.query.enterspeed.com/. As with Claude Desktop, a browser connector cannot send an x-api-key header — it signs you in instead, and the session needs a tenant and environment selected before any query tool runs.
Troubleshooting
Next steps