Add it to your agent, then just ask
Connecting the gateway is one config change. After that your agent discovers 139 tools by itself and you go back to typing ordinary sentences.
What it looks like
Two things people actually type once the gateway is connected. The first has the agent onboard itself: agent.txt documents the signup call, so the agent can read it and claim the free credit without you leaving the chat.
Reading agent.txt… it documents a signup endpoint.
POST https://gateway.mcpharbor.dev/v1/signup
Done. You have $10.00 of credit, about 100,000 tool calls. I have saved the key. Discovery is free; each tool call costs $0.0001.
npm_registry__npm_deps $0.0001
express v5.2.1 has 28 dependencies, including qs, send,
cookie, debug and etag.
openalex__openalex_search_entities $0.0001
2,600,858 works match. The most cited recent one is Model Context Protocol (MCP): Landscape, Security Threats, and Future Research Directions (2026).
Illustrative, not a recording. Your agent picks the tool; the gateway routes it and bills the call.
Setup, once
Replace YOUR_KEY with your API key. Field names differ between clients
— servers against mcpServers, url against
serverUrl — and the wrong one fails in a way that looks like the gateway
is down, so each snippet below is the one that client's own docs specify.
Run this in your terminal. No file to edit.
claude mcp add --transport http --scope user mcpharbor \
https://gateway.mcpharbor.dev/mcp \
--header "Authorization: Bearer YOUR_KEY"
claude mcp list # confirm it connected
Watch out: This puts your key in shell history. To avoid that, add it to a project .mcp.json instead and reference an environment variable: the JSON field is "type": "http", not transport, and an entry with a url but no type is read as a stdio server and skipped.
Verified against Claude Code MCP docs.
Settings → Connectors → Add custom connector.
Name: MCP Harbor
MCP server URL: https://gateway.mcpharbor.dev/mcp
Authentication: No sign-in
Request headers:
authorization -> Bearer YOUR_KEY
Watch out: Choose No sign-in; on an OAuth connection Claude owns the Authorization header and you cannot set it. Type the word Bearer and a space before your key — the value is sent verbatim. Authentication cannot be edited after the connector is added, so rotating the key means removing and re-adding it. If your dialog has no Request headers section, your organization does not have that beta yet; use the mcp-remote bridge instead.
Verified against Anthropic custom connector docs.
~/.cursor/mcp.json for every project, or .cursor/mcp.json for one.
{
"mcpServers": {
"mcpharbor": {
"url": "https://gateway.mcpharbor.dev/mcp",
"headers": {
"Authorization": "Bearer YOUR_KEY"
}
}
}
}
Verified against Cursor MCP docs.
.vscode/mcp.json in your project. VS Code prompts for the key and stores it securely.
{
"inputs": [
{
"type": "promptString",
"id": "mcpharbor-key",
"description": "MCP Harbor API key",
"password": true
}
],
"servers": {
"mcpharbor": {
"type": "http",
"url": "https://gateway.mcpharbor.dev/mcp",
"headers": {
"Authorization": "Bearer ${input:mcpharbor-key}"
}
}
}
}
Watch out: The top-level key is servers, not mcpServers as in most other clients. Use the Start action VS Code shows above the entry, then ask in Copilot Chat in Agent mode. Do not add comments — this file is plain JSON.
Verified against VS Code MCP configuration.
~/.codeium/windsurf/mcp_config.json
{
"mcpServers": {
"mcpharbor": {
"serverUrl": "https://gateway.mcpharbor.dev/mcp",
"headers": {
"Authorization": "Bearer YOUR_KEY"
}
}
}
}
Watch out: The field is serverUrl here, not url. Cascade also caps itself at 100 tools in total, so a large gateway catalogue can crowd out your other servers — that shows up as tools quietly missing rather than as an error.
Verified against Cascade MCP docs (published under Devin Desktop since the Windsurf rebrand).
Python. pip install openai-agents
import asyncio, os
from agents import Agent, Runner
from agents.mcp import MCPServerStreamableHttp
async def main():
async with MCPServerStreamableHttp(
name="MCP Harbor",
params={
"url": "https://gateway.mcpharbor.dev/mcp",
"headers": {"Authorization": f"Bearer {os.environ['MCPHARBOR_API_KEY']}"},
"timeout": 30,
},
) as server:
agent = Agent(name="Assistant", mcp_servers=[server])
result = await Runner.run(agent, "What does the express package depend on?")
print(result.final_output)
asyncio.run(main())
Watch out: Two keys are needed: MCPHARBOR_API_KEY for the gateway and OPENAI_API_KEY for the model running the agent. Setting only the first gives an authentication error from OpenAI, which looks like our problem but is not. Use MCPServerStreamableHttp, not MCPServerSse.
Verified against OpenAI Agents SDK MCP docs.
Then what
- Ask in plain language. Your agent reads the tool list and picks for itself. You never name a tool.
- Discovery is free. Listing tools, reading the docs and querying the registry never cost anything. Only a tool call that reaches a provider is billed, at $0.0001.
- You start with $10.00 of credit — about 100,000 calls. No card.
- A failed call is refunded automatically, inside the same request.
If a client reports the server as unauthorized, check the key has no
trailing whitespace and that Bearer precedes it. This gateway uses a static
bearer token and does not use OAuth, so any prompt to sign in means the header is not
reaching us.