Organizations
Organizations on the Moonlit platform pool usage across members and can create MCP keys for deployed services, backends, and agents that cannot complete a browser sign-in.
MCP keys
An MCP key authenticates an application. Members connecting a desktop client never need one; they sign in with their Moonlit account. Use an MCP key when the connection belongs to a workload: a chatbot, a pipeline, an internal tool, or an agent running on a server.
- Keys are created and revoked by your organization's Owner or a member with the Developer role, under My organization, MCP keys in the Moonlit platform.
- Calls made with an MCP key count against your organization's pooled monthly quota. In your organization settings you can manage keys and see your usage.
- Send the key as a Bearer token on every request:
Authorization: Bearer <your MCP key>In IDE and CLI clients
Clients that support custom headers can use an MCP key instead of the sign-in flow. This is useful for shared team configuration. The header shape is the same everywhere:
{
"mcpServers": {
"moonlit": {
"url": "https://mcp.moonlit.ai/mcp",
"headers": {
"Authorization": "Bearer ${MOONLIT_MCP_KEY}"
}
}
}
}The same headers block works in Cursor, VS Code, Gemini CLI, Windsurf, and Zed configurations (adjust the URL key name per client, see How to connect). In Claude Code: claude mcp add --transport http moonlit https://mcp.moonlit.ai/mcp --header "Authorization: Bearer $MOONLIT_MCP_KEY".
Deployed services
Any MCP SDK can hold the connection. With the Python SDK over streamable HTTP:
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
import os
async def main():
async with streamablehttp_client(
"https://mcp.moonlit.ai/mcp",
headers={"Authorization": f"Bearer {os.environ['MOONLIT_MCP_KEY']}"},
) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
tools = await session.list_tools()
print([t.name for t in tools.tools])Anthropic API
The Anthropic API connects to remote MCP servers directly through the mcp_servers parameter, so Claude can use Moonlit tools inside your own product without you hosting an MCP client:
curl https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: mcp-client-2025-11-20" \
-H "content-type: application/json" \
-d '{
"model": "claude-sonnet-5",
"max_tokens": 2048,
"messages": [
{"role": "user", "content": "Which documents cite GDPR Article 22?"}
],
"mcp_servers": [{
"type": "url",
"url": "https://mcp.moonlit.ai/mcp",
"name": "moonlit",
"authorization_token": "YOUR_MCP_KEY"
}],
"tools": [{"type": "mcp_toolset", "mcp_server_name": "moonlit"}]
}'OpenAI API
The OpenAI Responses API does the same through the remote MCP tool type:
curl https://api.openai.com/v1/responses \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "content-type: application/json" \
-d '{
"model": "gpt-5",
"input": "Which documents cite GDPR Article 22?",
"tools": [{
"type": "mcp",
"server_label": "moonlit",
"server_url": "https://mcp.moonlit.ai/mcp",
"authorization": "YOUR_MCP_KEY"
}]
}'Quota and monitoring
Every connection, keyed or signed in, can call get_account_status to read the plan and the remaining monthly quota. The call is free, which makes it safe to use as a health check in deployed services. Searches, document retrievals, and filter lookups count as one call each; get_account_status and convert_to_celex never count.
For enterprise agreements, including pooled quotas and service levels beyond the self-serve tiers, get in touch. Terms agreed there take precedence over the published MCP Terms.