The hosted /api/mcp path is a tools and data MCP server. It has no backend LLM and no model selection. The model is always the MCP client's model: Cursor, Claude Desktop, Claude Code, LM Studio, or another MCP host. Request a free gtmd_ key, add the URL with a Bearer header or the per-key URL, then ask in natural language. A local install of the same server needs no key.
/api/mcp path has no backend
LLM and no model selection. The model is always the MCP client's model: Cursor, Claude Desktop,
Claude Code, LM Studio, or another MCP host. Powerhouse and LM Studio factory jobs are an
internal workstation path, not this runtime.This is a tools and directory data API. The hosted copy at
/gtm-directory/api/mcp exposes the same eleven read-only tools as the public
Python package. It answers from a baked directory.json and it makes zero outbound
requests. It is not a chat model, not an assistant, and not a hosted LLM.
It has no backend LLM and no model selection. It does not host a model, does not pick a model, and does not switch models based on your query. The model is always the MCP client's model. When you type a question, that client model chooses a tool, fills the arguments, and reads the result. If the model invents a tool name or a count, that is the client's mistake, not a fact this server produced. Ask it to quote the honesty block and the bake date.
The public site and the JSON live on AWS: object storage behind CloudFront. The MCP API is the
same read-only server, reached at the apex path
https://andrewcmcguire.com/gtm-directory/api/mcp
and at the CloudFront fallback
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 copy needs a free key. A key looks like gtmd_ followed by 32
characters. Request one at /access/. A work email address is
approved automatically, usually within about ten minutes. 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 (Cursor, Claude Desktop, Claude Code) sends
Authorization: Bearer gtmd_.... Replace the placeholder with your key.
Paste this into the client's MCP settings. Cursor: Settings, MCP, add a server. Claude Desktop:
edit claude_desktop_config.json and restart.
{
"mcpServers": {
"gtm-directory": {
"url": "https://andrewcmcguire.com/gtm-directory/api/mcp",
"headers": {
"Authorization": "Bearer gtmd_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
}
claude mcp add --transport http gtm-directory https://andrewcmcguire.com/gtm-directory/api/mcp --header "Authorization: Bearer gtmd_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
A claude.ai custom connector cannot send a header. Use the per-key URL, and treat that URL like the key it contains.
{
"mcpServers": {
"gtm-directory": {
"url": "https://andrewcmcguire.com/gtm-directory/api/mcp/k/gtmd_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
Both forms also work on the fallback host. 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. Revoke a key by replying to the email it arrived in.
LM Studio is a supported local client model path. You run a model in LM Studio. That model
is the only model in the loop. Then you attach this directory as a remote MCP server. LM Studio
uses the same mcp.json shape as Cursor (LM Studio 0.3.17 and later). The hosted
/api/mcp path still has no backend LLM and no model selection.
gtmd_ key at
/access/.Authorization: Bearer gtmd_..., or use the per-key URL
/api/mcp/k/gtmd_... if the client only takes a URL.https://d1hkopq5aq852m.cloudfront.net/gtm-directory/api/mcp
and keep the path and the key the same.Paste this into LM Studio's mcp.json (same shape as Cursor). Replace the
placeholder with your key:
{
"mcpServers": {
"gtm-directory": {
"url": "https://andrewcmcguire.com/gtm-directory/api/mcp",
"headers": {
"Authorization": "Bearer gtmd_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
}
If the apex host returns 403, use this CloudFront block instead. Path and key stay the same:
{
"mcpServers": {
"gtm-directory": {
"url": "https://d1hkopq5aq852m.cloudfront.net/gtm-directory/api/mcp",
"headers": {
"Authorization": "Bearer gtmd_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
}
If the client only takes a URL, use the per-key form:
{
"mcpServers": {
"gtm-directory": {
"url": "https://andrewcmcguire.com/gtm-directory/api/mcp/k/gtmd_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
Powerhouse and any LM Studio factory jobs used internally to draft or harvest
directory content are not the public product runtime. They do not run on
/api/mcp, they do not select a model for visitors, and they are not required to
query the hosted directory.
Do not invent a twelfth. The server package is the authority.
| Tool | Question it answers |
|---|---|
find_tools | Which tools claim a job, and by which interface (MCP, CLI) an agent can reach them |
get_tool | One directory entry, every field, every source URL |
list_categories | The 15 categories with counts and gates |
whats_mcpd | How much of GTM an agent can reach, in numbers |
find_by_gate | The access axis on its own: free, paid, enterprise, unknown |
get_docs_digest | Structured facts from vendor API docs, when crawled |
get_server_tools | What one MCP server actually exposes, with evidence |
get_install | Both routes into one tool: the MCP endpoint and the CLI install commands |
whats_building | What a vendor ships in public on GitHub, dated |
plan_stack | A step by step shortlist for a multi-step GTM job |
list_jobs | The closed capability vocabulary |
Say the job in plain English. The client model maps that to a tool. These prompts are ones this directory can actually answer. Each line names the tool it should call. Two of them are site surfaces, not MCP tools, and the list says so.
find_tools with a find-work-email job and mcp_status=official.
The model is the one loaded in LM Studio. The hosted /api/mcp path does not select
or run a model.find_tools with mcp_status=official (or community) and
gate=free or paid. Solo reachable on this bake means an official or
community server plus a free or paid self serve gate: 168 entries, counted
2026-09-27.get_tool. That is the directory entry, not the company page.get_server_tools. A listed tool has not been called.get_install. Every command is quoted from a source URL with a fetch
date.whats_mcpd. Quote the bake date with the numbers.list_categories.list_jobs. The vocabulary is closed on purpose.find_by_gate with gate=enterprise-only.get_docs_digest. If the docs have not been crawled, the tool says so rather
than guessing.whats_building. Dated, or the field says it is unmeasured.plan_stack. A job tag means the vendor says the product does this. It is a
reading order, not a benchmark.get_company tool.Use these words the way this directory uses them, or the answer is wrong even if it sounds confident.
last_checked date.Never invent a count. The live bake of 2026-09-27 has
1,252 entries and 201 official MCP servers
(540 community, 487 none found,
15 unknown, 9 not applicable). If a later bake
disagrees, quote that bake's directory.json instead. An undated number is a bug.
directory.json. A company page never
invents official.directory.json until it is reviewed. A staged candidate
is not a listing.Every number on this page is generated from directory.json at build time and carries the date it was baked: 2026-09-27. Nothing is typed by hand, nothing is rounded, and nothing is estimated. The underlying data is published in full. Where the honest answer is a zero, the zero is printed.