The hosted copy of the directory's MCP server at https://andrewcmcguire.com/gtm-directory/api/mcp
requires a key since 2026-09-08. Without one it answers 401 with a JSON body that points back here.
A key looks like gtmd_ followed by 32 characters, and it is presented one of two ways,
shown below the form.
If you were sent back here, a required field was missing or the email did not look real. Fill it in and send it again.
Name, email and company are used to send the key and to ask a follow up question if the use case is unclear. They are never published. The form posts to this site's own origin and nowhere else.
Keys are free. A request from a work email address is approved automatically, usually within about ten minutes, by the directory's access desk, and the key arrives by email. Requests from free-mail addresses or without a clear use case are reviewed by Drew, the directory's operator, and answered within a day.
The hosted copy records, per key, the number of calls and the date last used, and nothing else: no query text, no tool arguments, no IP log kept. A key can be revoked on request by replying to the email it came in.
The local install needs no key because the code and the data are public. The data endpoint needs no key either.
Any client that supports headers sends Authorization: Bearer gtmd_.... Cursor,
Claude Code and Claude Desktop all do. Replace the placeholder with your key:
{
"mcpServers": {
"gtm-directory": {
"url": "https://andrewcmcguire.com/gtm-directory/api/mcp",
"headers": {
"Authorization": "Bearer gtmd_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
}
The same thing as one line for Claude Code:
claude mcp add --transport http gtm-directory https://andrewcmcguire.com/gtm-directory/api/mcp --header "Authorization: Bearer gtmd_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
A client that only accepts a URL, such as a claude.ai custom connector, cannot send a header. It uses the per-key URL instead, which carries the key as the last path segment:
{
"mcpServers": {
"gtm-directory": {
"url": "https://andrewcmcguire.com/gtm-directory/api/mcp/k/gtmd_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
Treat that URL like the key it contains. Do not paste it into anything public.
Both forms also work on https://d1hkopq5aq852m.cloudfront.net/gtm-directory/api/mcp. Some clients hit a Cloudflare
403 on the apex host today. If yours does, swap the host and keep the rest of the URL and the key
exactly as they are.
The hosted /api/mcp path has no backend LLM and no model selection. The model is
always your MCP client's model, including a local model in LM Studio. The guide has the connect
snippets, the LM Studio steps, the natural language prompts, the honesty vocabulary, and the
limits: How to use the hosted MCP.
The server is a public Python package in the gtm-mcp-directory repo and the data is one JSON file. A local install loads that file once and answers from memory, makes zero outbound requests, and asks nobody for anything. The install block is on the front page.