{
  "$comment": "The Thermograph connector registry. `kind` decides what a person actually has to do: 'hub' and 'proxied' need no install (they arrive with Centralis), 'local' must be installed on their own machine, usually because it needs an interactive OAuth flow or access to a desktop app that a server cannot have.",
  "connectors": [
    {
      "id": "centralis",
      "name": "Centralis",
      "kind": "hub",
      "priority": 1,
      "what": "The Thermograph control plane: the application database, the Iceberg climate lake, fleet logs, Grafana dashboards, OneDev (code.jinemi.com), the planning docs and notes, the public API, and Discord (proxied).",
      "why": "One connector covering the whole business. If you install nothing else, install this \u2014 it is how you ask questions about the estate at all.",
      "auth": "Sign in with Google \u2014 add the connector and Claude walks you through it. Your Google address must be on the team list first; ask an owner. A hand-issued bearer token is the alternative, for scripts and for anything that cannot open a browser.",
      "install": {
        "web": "Settings \u2192 Connectors \u2192 Add custom connector \u2192 https://mcp.jinemi.com/mcp, then Connect and sign in with Google",
        "desktop": "Settings \u2192 Connectors \u2192 Add custom connector \u2192 https://mcp.jinemi.com/mcp, then Connect and sign in with Google",
        "code": "claude mcp add --transport http centralis https://mcp.jinemi.com/mcp \u2014 then run /mcp and pick Authenticate. For a headless or scripted client, pass a bearer token instead: --header \"Authorization: Bearer $CENTRALIS_TOKEN\"",
        "chatgpt": "Settings \u2192 Connectors \u2192 Advanced \u2192 Developer mode, then add https://mcp.jinemi.com/mcp?toolsets=docs,ops,forge with OAuth and sign in with Google. Keep the ?toolsets= part \u2014 the whole surface is far more tools than ChatGPT will hold. Full guide: https://mcp.jinemi.com/setup/chatgpt"
      },
      "verify": "Ask: \"what's running on prod right now?\" \u2014 it should call fleet_status and list the Swarm services."
    },
    {
      "id": "discord",
      "name": "Discord (Thermograph.org community)",
      "kind": "proxied",
      "priority": 2,
      "what": "139 tools for the community server \u2014 channels, messages, threads, forums, roles, members, moderation, events, webhooks and polls.",
      "why": "Discord is the support venue and a product channel: the daily unusual-weather post and alert DMs live there. Community work is business work.",
      "auth": "None for you \u2014 Centralis holds the bot token and proxies the calls.",
      "install": {
        "all": "Nothing to install. Arrives with Centralis under the discord_ prefix."
      },
      "note": "Only install the standalone server (npx @quadslab.io/discord-mcp init) if you need Discord in a client that cannot reach Centralis.",
      "verify": "Ask: \"list the Discord channels\" \u2014 it should call discord_list_channels."
    },
    {
      "id": "figma",
      "name": "Figma",
      "kind": "local",
      "priority": 3,
      "what": "Figma's official MCP server: read design files, inspect frames and components, and pull design context into code.",
      "why": "Thermograph's visual system is a single hand-written stylesheet where every value is a design token. Design changes start in Figma and have to land as tokens, not raw hex.",
      "auth": "Interactive OAuth with your own Figma account.",
      "install": {
        "web": "Settings \u2192 Connectors \u2192 Add custom connector \u2192 https://mcp.figma.com/mcp, then complete the Figma sign-in.",
        "desktop": "Settings \u2192 Connectors \u2192 Add custom connector \u2192 https://mcp.figma.com/mcp, then complete the Figma sign-in.",
        "code": "claude mcp add --transport http figma https://mcp.figma.com/mcp"
      },
      "note": "This one is deliberately NOT proxied through Centralis: its OAuth flow is interactive, and a headless server cannot complete a sign-in on your behalf. Centralis does carry native figma_* tools that use a shared personal access token for read-only file and design-token queries \u2014 those work without this, but the official server is better for design-to-code.",
      "verify": "Ask it to read any Figma file you have access to."
    },
    {
      "id": "chrome-devtools",
      "name": "Chrome DevTools",
      "kind": "local",
      "priority": 4,
      "what": "Drive a real browser: navigate, screenshot, read the console and network activity.",
      "why": "Every design or feature change is validated at 390 / 800 / 1920 / 2560 / 3840px in light and dark. That check needs a real browser on your machine, which no remote server can provide.",
      "auth": "None.",
      "install": {
        "code": "claude mcp add chrome-devtools -- npx -y chrome-devtools-mcp@latest",
        "desktop": "Add to claude_desktop_config.json: {\"mcpServers\":{\"chrome-devtools\":{\"command\":\"npx\",\"args\":[\"-y\",\"chrome-devtools-mcp@latest\"]}}}"
      },
      "note": "Local only \u2014 it controls a browser on your own machine, so it cannot be a remote connector.",
      "verify": "Ask it to screenshot https://thermograph.org at 390px wide."
    },
    {
      "id": "onedev",
      "name": "OneDev (git, PRs, CI)",
      "kind": "proxied",
      "priority": 5,
      "what": "Repositories, pull requests and CI over OneDev CE at code.jinemi.com, through Centralis's native onedev_* tools \u2014 projects, read, prs, pr_open, ci, status, branches, branch_create, branch_delete, branch_protection, pr_update, pr_await, deploy_await, pr_merge, repo_settings, packages, tags, agents, build_log, write. Project paths are hierarchical (Jinemi/centralis, never a bare centralis) and the REST API is under /~api. OneDev has no issue tracker of its own (issueManagement is off on every project) \u2014 Taiga owns planning, via the taiga_* tools.",
      "why": "OneDev has been the estate's forge of record since 2026-08-25. It is the only way to reach the estate's actual current git history, open PRs and CI now that Forgejo is retired outright \u2014 nothing lands anywhere else any more.",
      "auth": "None for you \u2014 Centralis holds the token.",
      "install": {
        "all": "Nothing to install. Arrives with Centralis under the onedev_ prefix."
      },
      "note": "There is no OneDev-equivalent CLI yet \u2014 no tea for OneDev the way there was for Forgejo. Day-to-day git work goes through these tools, or the OneDev web UI directly at https://code.jinemi.com.",
      "verify": "Ask: \"what PRs are open on Jinemi/centralis?\" \u2014 it should call onedev_prs."
    },
    {
      "id": "tea",
      "name": "tea (Forgejo's CLI \u2014 retired)",
      "kind": "retired",
      "priority": 6,
      "what": "Forgejo's own command-line client: pull requests, issues, releases, repository listings and raw API calls, from whatever shell you are already in. It only ever spoke to Forgejo at dev.jinemi.com, never to OneDev.",
      "why": "Forgejo was retired outright on 2026-08-31, not merely frozen \u2014 the Caddy vhosts, swarm stack, images and data volumes were deleted from central1, and the dev.jinemi.com DNS record itself was removed. There is no host left for tea to reach: every command, read or write, now fails to resolve the name. OneDev has been the estate's only forge since 2026-08-25 (see the onedev connector); nothing tea could do transfers to it.",
      "install": {
        "all": "Do not install it. If you have it from before the retirement, an existing tea login pointed at dev.jinemi.com is dead weight, not a fallback \u2014 remove it or ignore it."
      },
      "note": "The detailed gap analysis this entry used to carry \u2014 what tea could and could not do against the live Forgejo \u2014 is preserved in docs/mcp-audit.md for the historical record. None of it is actionable any more.",
      "verify": "Nothing to verify \u2014 there is no live target."
    },
    {
      "id": "forgejo",
      "name": "Forgejo (retired)",
      "kind": "retired",
      "priority": 7,
      "what": "Was reads against dev.jinemi.com \u2014 repositories, pull requests, issues and CI history \u2014 through Centralis's native forge_* tools.",
      "why": "Forgejo was the estate's git host until OneDev took over as forge of record on 2026-08-25. It was retired outright on 2026-08-31: Caddy vhosts, the swarm stack, images and data volumes deleted from central1, DNS removed. The forge_* tools that read it were never carried over in the Go migration \u2014 they do not exist on Centralis's tool surface at all any more, opt-in or otherwise. For anything current, use the onedev connector instead.",
      "auth": "None for you \u2014 Centralis holds the token.",
      "install": {
        "all": "Nothing to install, and nothing arrives \u2014 forge_read, forge_write, forge_prs, forge_issues, forge_ci and the rest of the family are gone."
      },
      "note": "If a client still lists a forge toolset, that name now selects OneDev's onedev_* tools (see cmd/centralis/main.go's directUpstreamToolsets) \u2014 it is not a way to reach Forgejo, which no longer answers at all.",
      "verify": "Nothing to verify against \u2014 the host is gone."
    },
    {
      "id": "grafana",
      "name": "Grafana (live observability)",
      "kind": "local",
      "priority": 8,
      "what": "The official grafana/mcp-grafana server, read-only: live dashboards as rendered, alert-rule state, datasource health, and ad-hoc queries against Loki/Prometheus.",
      "why": "Centralis's native dashboard_* tools read the repo JSON that Grafana is provisioned FROM, and write PRs. This reads what Grafana is actually showing right now \u2014 the other half of the picture. It authenticates as you (a Grafana service-account token), which is why it installs locally rather than being proxied.",
      "auth": "Grafana service-account token \u2014 separate from the Google SSO humans use. See the setup guide; never commit the raw token.",
      "install": {
        "code": "claude mcp add grafana -s user -e GRAFANA_URL=https://monitor.jinemi.com -e GRAFANA_SERVICE_ACCOUNT_TOKEN=\"<token>\" -- uvx mcp-grafana --disable-write"
      },
      "setup": "grafana",
      "note": "Keep --disable-write unless you specifically need to mutate Grafana; and remember dashboard changes are provisioned from repo JSON, so a durable edit still goes through Centralis's dashboard_write (a PR), not a live write here.",
      "verify": "claude mcp get grafana \u2014 should show Status: \u2714 Connected."
    }
  ],
  "skills": [
    {
      "id": "thermograph-orientation",
      "name": "Orientation",
      "for": "Anyone new to the business",
      "what": "What Thermograph is, how the estate is laid out, and the rules that are not negotiable."
    },
    {
      "id": "thermograph-ops",
      "name": "Operations",
      "for": "Anyone deploying or debugging",
      "what": "Release flow, how to read the fleet, and what to do when something breaks."
    },
    {
      "id": "thermograph-community",
      "name": "Community",
      "for": "Anyone working in Discord",
      "what": "Channel structure, the notes/summary/recording channel conventions, and moderation norms."
    },
    {
      "id": "estate-search",
      "name": "Estate search",
      "for": "Everyone searching Discord, Taiga, OneDev or Drive",
      "what": "Routing table, ID discipline and traps for the five estate search tools."
    }
  ]
}
