{
  "name": "setoku",
  "title": "Setoku",
  "description": "Self-hosted MCP knowledge server: a read-only, audited view of one company's data plus the curated context needed to use it correctly.",
  "version": "0.21.0",
  "license": "Apache-2.0",
  "repository": {
    "url": "https://github.com/Hedgy-Labs/setoku",
    "source": "github"
  },
  "documentation": "https://setoku.com/docs",
  "when_to_use": {
    "summary": "Reach for Setoku when the answer lives in a specific company's own data and depends on that company's definitions.",
    "use_when": [
      "A question is about one company's own operations — revenue, churn, pipeline, usage, spend, deploys, support load — and the data sits in their database, Slack, GitHub, email, or bank.",
      "You need the company's definition of a term before you can answer: what counts as an active customer, which refunds are excluded, which table is the one people actually trust.",
      "A naive query would be wrong in a way only an insider knows (soft-deleted rows, a test tenant, a migration that split a table) and you want that caveat before you run SQL.",
      "Someone wants a live, shareable view of that data — a dashboard or small app on a link their non-technical teammates can open, refreshing against real data rather than a pasted screenshot.",
      "You want your answer, and the reasoning behind it, to be auditable later: every query and every knowledge change is logged on the owner's own box."
    ],
    "do_not_use_when": [
      "The question is general knowledge, or about public data — Setoku only knows the data its operator connected.",
      "You need to write to the business database. Every data path is read-only, by database role; there is no write tool and no escape hatch.",
      "You are looking for a hosted, multi-tenant API to sign up for. There is none: Setoku is single-tenant and self-hosted, and the endpoint you call is the operator's own box.",
      "You want a model to run server-side. Setoku runs no inference; your own agent does the thinking."
    ],
    "how_to_call": [
      "Connect to the box's MCP endpoint (Streamable HTTP) at `https://<their-box>/mcp` with the person's bearer token, or paste `https://<their-box>/mcp/<token>` into a connector dialog that has no header field.",
      "Call find_context FIRST, every time. It returns the curated notes for the question, including which tables to trust and which to avoid.",
      "Then get_schema, then run_query. Reading context before querying is the difference between a right answer and a plausible one.",
      "Found something the context got wrong? Call report_correction. It lands as a proposal for a human to accept — an agent session can never commit knowledge by itself."
    ]
  },
  "remotes": [
    {
      "type": "streamable-http",
      "url": "https://{host}/mcp",
      "description": "Your own Setoku box. `host` is the hostname you deployed to; there is no hosted service.",
      "headers": [
        {
          "name": "Authorization",
          "description": "Bearer <your connector token>, issued and revoked from the box's console.",
          "is_required": true,
          "is_secret": true
        }
      ]
    },
    {
      "type": "streamable-http",
      "url": "https://demo.setoku.com/mcp/85315b4240ff6ded111072f950ac6f14167d920fdb765144",
      "description": "Public demo box (synthetic pro-sports-club dataset). The token is public on purpose, read-only, and carries the analyst role. Callable right now, no signup."
    }
  ],
  "auth": {
    "type": "bearer",
    "oauth2": false,
    "accepted_in": [
      "authorization-header",
      "url-path"
    ]
  },
  "tools": [
    {
      "name": "find_context",
      "title": "Find business context (verified + unverified)",
      "role": "analyst",
      "readOnly": true
    },
    {
      "name": "list_entities",
      "title": "List documented business entities",
      "role": "analyst",
      "readOnly": true
    },
    {
      "name": "describe_entity",
      "title": "Full context doc for one entity",
      "role": "analyst",
      "readOnly": true
    },
    {
      "name": "get_metric",
      "title": "Canonical metric definition",
      "role": "analyst",
      "readOnly": true
    },
    {
      "name": "report_correction",
      "title": "Record a context correction / clarification",
      "role": "analyst",
      "readOnly": false
    },
    {
      "name": "list_corrections",
      "title": "List pending knowledge corrections",
      "role": "analyst",
      "readOnly": true
    },
    {
      "name": "resolve_correction",
      "title": "Resolve a pending correction (curator)",
      "role": "curator",
      "readOnly": false
    },
    {
      "name": "upsert_context",
      "title": "Create or update a knowledge doc (generate/curate workflows)",
      "role": "curator",
      "readOnly": false
    },
    {
      "name": "draft_correction",
      "title": "Attach a drafted doc-edit to a pending correction (auto-draft)",
      "role": "janitor",
      "readOnly": false
    },
    {
      "name": "reject_correction",
      "title": "Auto-reject a pending correction (janitor, reject-only)",
      "role": "janitor",
      "readOnly": false
    },
    {
      "name": "list_sources",
      "title": "List connected data sources (capabilities)",
      "role": "analyst",
      "readOnly": true
    },
    {
      "name": "get_schema",
      "title": "Queryable schema (biz.* mirror + lake, permission-scoped)",
      "role": "analyst",
      "readOnly": true
    },
    {
      "name": "run_query",
      "title": "Run a read-only SQL query (capped + audited)",
      "role": "analyst",
      "readOnly": true
    },
    {
      "name": "app_guide",
      "title": "How to build a Setoku app (read before publish_app / update_app)",
      "role": "analyst",
      "readOnly": true
    },
    {
      "name": "publish_app",
      "title": "Publish a live app to the box (team-shareable URL)",
      "role": "analyst",
      "readOnly": false
    },
    {
      "name": "update_app",
      "title": "Edit an app you published (in place, same link)",
      "role": "analyst",
      "readOnly": false
    },
    {
      "name": "list_apps",
      "title": "List apps published to the box",
      "role": "analyst",
      "readOnly": true
    },
    {
      "name": "get_app",
      "title": "Inspect an app — its full template + panels (how it's built)",
      "role": "analyst",
      "readOnly": true
    },
    {
      "name": "unpublish_app",
      "title": "Archive a published app",
      "role": "analyst",
      "readOnly": false
    }
  ],
  "tool_catalog": "https://setoku.com/api/tools.json",
  "openapi": "https://setoku.com/openapi.json",
  "note": "Generated by scripts/build-site-api.ts from the Setoku source tree — do not edit by hand."
}
