{
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-05",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.3",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "tool": {
    "category": "workflow-automation",
    "endpoint": "https://tandem.ac/mcp",
    "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/tandem-docs-mcp.json",
    "kind": "mcp",
    "listed": "indexed",
    "liveUrl": "https://www.anchorterminal.com/api/v1/live/tandem-docs-mcp.json",
    "markdownUrl": "https://www.anchorterminal.com/tools/tandem-docs-mcp.md",
    "mcpTools": {
      "check": {
        "checker": "anchor-check/1.0",
        "totalTokens": 1979,
        "counts": {
          "error": 0,
          "note": 1,
          "warn": 1
        },
        "findings": [
          {
            "rule": "TC21",
            "severity": "warn",
            "tool": "compare_docs_index_refresh",
            "message": "described almost the same as compare_doc_page_refresh (83% of the same words)",
            "fix": "Say in each description when to use it instead of the other."
          },
          {
            "rule": "TC24",
            "severity": "note",
            "message": "13 of 13 tools have no outputSchema",
            "fix": "Declare outputSchema for tools that return structured data, and return structuredContent that matches it."
          }
        ]
      },
      "checkedAt": "2026-10-04T22:20:01Z",
      "count": 13,
      "note": "answered without the initialize handshake",
      "schemaTokens": 1979,
      "status": "ok",
      "tools": [
        {
          "name": "search_docs",
          "description": "Search the published Tandem docs index for relevant pages.",
          "inputSchema": {
            "properties": {
              "audience": {
                "description": "Optional audience filter such as developer, desktop user, or operator.",
                "type": "string"
              },
              "docs_ref": {
                "description": "Docs channel or immutable ref. Defaults to stable. Use next, refs/\u003csha\u003e, or releases/\u003cversion\u003e only when explicitly needed.",
                "type": "string"
              },
              "engine_version": {
                "description": "Optional Tandem engine version hint. If supplied without docs_ref, the MCP still defaults to stable unless a matching versioned docs ref is configured.",
                "type": "string"
              },
              "limit": {
                "description": "Maximum number of matching docs pages to return.",
                "maximum": 20,
                "minimum": 1,
                "type": "integer"
              },
              "query": {
                "description": "The Tandem question, task, or keyword query to search for.",
                "type": "string"
              }
            },
            "required": [
              "query"
            ],
            "type": "object"
          },
          "annotations": {
            "idempotentHint": true,
            "openWorldHint": true,
            "readOnlyHint": true,
            "title": "Search Tandem docs"
          }
        },
        {
          "name": "get_doc",
          "description": "Fetch and normalize a published Tandem docs page by path or URL.",
          "inputSchema": {
            "properties": {
              "docs_ref": {
                "description": "Docs channel or immutable ref. Defaults to stable.",
                "type": "string"
              },
              "engine_version": {
                "description": "Optional Tandem engine version hint for compatibility checks.",
                "type": "string"
              },
              "path": {
                "description": "Docs path like /sdk/python/ or a full Tandem docs URL.",
                "type": "string"
              }
            },
            "required": [
              "path"
            ],
            "type": "object"
          },
          "annotations": {
            "idempotentHint": true,
            "openWorldHint": true,
            "readOnlyHint": true,
            "title": "Fetch a docs page"
          }
        },
        {
          "name": "get_start_path",
          "description": "Recommend the best Tandem docs starting path for a desktop user, server admin, or developer.",
          "inputSchema": {
            "properties": {
              "docs_ref": {
                "description": "Docs channel or immutable ref. Defaults to stable.",
                "type": "string"
              },
              "role": {
                "description": "The user role to optimize the docs starting point for.",
                "enum": [
                  "desktop",
                  "server_admin",
                  "developer"
                ],
                "type": "string"
              }
            },
            "required": [
              "role"
            ],
            "type": "object"
          },
          "annotations": {
            "idempotentHint": true,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "Get a starting docs path"
          }
        },
        {
          "name": "recommend_next_docs",
          "description": "Recommend the next Tandem docs to read after a current page, optionally biased toward a goal.",
          "inputSchema": {
            "properties": {
              "current_path": {
                "description": "Current Tandem docs path the user has already read.",
                "type": "string"
              },
              "docs_ref": {
                "description": "Docs channel or immutable ref. Defaults to stable.",
                "type": "string"
              },
              "goal": {
                "description": "Optional goal such as install Tandem, use the Python SDK, or build workflows.",
                "type": "string"
              },
              "limit": {
                "description": "Maximum number of next-doc recommendations to return.",
                "maximum": 10,
                "minimum": 1,
                "type": "integer"
              }
            },
            "required": [
              "current_path"
            ],
            "type": "object"
          },
          "annotations": {
            "idempotentHint": true,
            "openWorldHint": true,
            "readOnlyHint": true,
            "title": "Recommend next docs"
          }
        },
        {
          "name": "answer_how_to",
          "description": "Answer how to install or use Tandem, build workflows, or use the SDKs by synthesizing relevant published docs.",
          "inputSchema": {
            "properties": {
              "audience": {
                "description": "Optional audience hint such as developer, desktop user, or operator.",
                "type": "string"
              },
              "docs_ref": {
                "description": "Docs channel or immutable ref. Defaults to stable.",
                "type": "string"
              },
              "engine_version": {
                "description": "Optional Tandem engine version hint. Prefer stable docs for installed engines.",
                "type": "string"
              },
              "limit": {
                "description": "Maximum number of supporting docs recommendations to include.",
                "maximum": 10,
                "minimum": 1,
                "type": "integer"
              },
              "task": {
                "description": "The Tandem task or question that needs a docs-grounded answer.",
                "type": "string"
              }
            },
            "required": [
              "task"
            ],
            "type": "object"
          },
          "annotations": {
            "idempotentHint": true,
            "openWorldHint": true,
            "readOnlyHint": true,
            "title": "Answer a Tandem how-to question"
          }
        },
        {
          "name": "get_tandem_guide",
          "description": "Return a structured Tandem learning guide for install-engine, python-sdk, typescript-sdk, build-workflows, or headless-deploy.",
          "inputSchema": {
            "properties": {
              "docs_ref": {
                "description": "Docs channel or immutable ref. Defaults to stable.",
                "type": "string"
              },
              "topic": {
                "description": "Named Tandem learning guide to return.",
                "enum": [
                  "install-engine",
                  "python-sdk",
                  "typescript-sdk",
                  "build-workflows",
                  "headless-deploy"
                ],
                "type": "string"
              }
            },
            "required": [
              "topic"
            ],
            "type": "object"
          },
          "annotations": {
            "idempotentHint": true,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "Get a Tandem guide"
          }
        },
        {
          "name": "warmup_docs_cache",
          "description": "Refresh the docs index and preload the most important Tandem docs pages into cache.",
          "inputSchema": {
            "properties": {
              "docs_ref": {
                "description": "Docs channel or immutable ref. Defaults to stable.",
                "type": "string"
              },
              "force_refresh": {
                "description": "Whether to bypass cache and force fresh upstream fetches first.",
                "type": "boolean"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "idempotentHint": true,
            "openWorldHint": true,
            "title": "Warm docs cache"
          }
        },
        {
          "name": "get_docs_cache_status",
          "description": "Inspect the current docs cache state for index sources and warmed pages.",
          "inputSchema": {
            "properties": {},
            "type": "object"
          },
          "annotations": {
            "idempotentHint": true,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "Inspect docs cache status"
          }
        },
        {
          "name": "refresh_docs_index",
          "description": "Force-refresh docs indexes and report whether data came from the network, cache, or stale fallback.",
          "inputSchema": {
            "properties": {
              "docs_ref": {
                "description": "Docs channel or immutable ref. Defaults to stable.",
                "type": "string"
              },
              "force_refresh": {
                "description": "Whether to bypass cache and force a network refresh attempt.",
                "type": "boolean"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "idempotentHint": true,
            "openWorldHint": true,
            "title": "Refresh docs index"
          }
        },
        {
          "name": "refresh_doc_page",
          "description": "Force-refresh a docs page and report whether content came from the network, cache, or stale fallback.",
          "inputSchema": {
            "properties": {
              "docs_ref": {
                "description": "Docs channel or immutable ref. Defaults to stable.",
                "type": "string"
              },
              "force_refresh": {
                "description": "Whether to bypass cache and force a network refresh attempt.",
                "type": "boolean"
              },
              "path": {
                "description": "Docs path like /start-here/ or /sdk/python/ to refresh.",
                "type": "string"
              }
            },
            "required": [
              "path"
            ],
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "idempotentHint": true,
            "openWorldHint": true,
            "title": "Refresh one docs page"
          }
        },
        {
          "name": "invalidate_docs_cache",
          "description": "Invalidate docs cache entries for index data, all pages, or a specific page path.",
          "inputSchema": {
            "properties": {
              "docs_ref": {
                "description": "Optional docs ref to scope page/index cache invalidation.",
                "type": "string"
              },
              "path": {
                "description": "Required when target is page; identifies the specific docs path to invalidate.",
                "type": "string"
              },
              "target": {
                "description": "Which cache area to invalidate.",
                "enum": [
                  "all",
                  "index",
                  "pages",
                  "page"
                ],
                "type": "string"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "idempotentHint": true,
            "openWorldHint": false,
            "title": "Invalidate docs cache"
          }
        },
        {
          "name": "compare_docs_index_refresh",
          "description": "Force-refresh the docs indexes and return before/after hashes so content changes can be proven.",
          "inputSchema": {
            "properties": {
              "docs_ref": {
                "description": "Docs channel or immutable ref. Defaults to stable.",
                "type": "string"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "idempotentHint": true,
            "openWorldHint": true,
            "title": "Compare docs index refresh"
          }
        },
        {
          "name": "compare_doc_page_refresh",
          "description": "Force-refresh a docs page and return before/after hashes so page content changes can be proven.",
          "inputSchema": {
            "properties": {
              "docs_ref": {
                "description": "Docs channel or immutable ref. Defaults to stable.",
                "type": "string"
              },
              "path": {
                "description": "Docs path like /start-here/ or /sdk/python/ to compare before and after refresh.",
                "type": "string"
              }
            },
            "required": [
              "path"
            ],
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "idempotentHint": true,
            "openWorldHint": true,
            "title": "Compare page refresh"
          }
        }
      ]
    },
    "name": "docs-mcp",
    "note": "Indexed from the official MCP registry: facts and our own checks, not reviewed, so no score, grade or rank.",
    "packages": null,
    "pageJsonUrl": "https://www.anchorterminal.com/tools/tandem-docs-mcp.json",
    "popularity": {
      "githubStars": 121
    },
    "registryName": "ac.tandem/docs-mcp",
    "remotes": [
      {
        "type": "streamable-http",
        "url": "https://tandem.ac/mcp"
      }
    ],
    "repository": "https://github.com/frumu-ai/tandem",
    "reviewed": false,
    "slug": "tandem-docs-mcp",
    "source": "the official MCP registry",
    "sourceUrl": "https://registry.modelcontextprotocol.io/v0.1/servers?search=ac.tandem/docs-mcp",
    "summary": "Remote MCP server for Tandem docs, install guides, SDKs, workflows, and agent setup help.",
    "updatedAt": "2026-04-22T21:06:34Z",
    "url": "https://www.anchorterminal.com/tools/tandem-docs-mcp",
    "vendor": "tandem.ac",
    "vendorUrl": "https://tandem.ac/docs-mcp",
    "version": "0.3.2",
    "websiteUrl": "https://tandem.ac/docs-mcp",
    "where": "hosted",
    "why": [
      "vendor"
    ]
  }
}
