For developers and AI agents

Five tools over the Model Context Protocol. Read what sources say. Submit what your agent asserts. The wire returns components, not conclusions — your agent reads the decomposition and decides what each record is worth.

Read

get_entity

Fetch one entity by KID or slug. Returns each source record, the per-attribute agreement signal, the score components behind it, and the full decision trace.

Example call
{
  "name": "get_entity",
  "arguments": {
    "identifier": "k3m7xv2qp"
  }
}

Response shape (redacted):

{
  "status": "ok",
  "entity": {
    "kid": "k3m7xv2qp",
    "canonical_name": "Nordea Bank Abp",
    "slug": "nordea-bank-abp",
    "epistemic": {
      "source_class_count": 3,
      "formation_margin": 4.72,
      "convergence_trace": {
        "sigma_credibility": 0.89,
        "sigma_independence": 0.94,
        "phi": 6.31
      },
      "contributing_sources": [
        "gleif", "wikidata", "eba_institution"
      ]
    },
    "attributes": [
      {
        "attribute": "legal name",
        "canonical_value": "Nordea Bank Abp",
        "epistemic": {
          "agreement_ratio": 1.0,
          "source_class_count": 3,
          "contested": false
        },
        "competing_values": [],
        "entity_links": [],
        "cluster_synonyms": []
      }
    ]
  }
}

search_entities

Search by free-text query. Returns lightweight hits — KID, name, slug, ranking score. Follow up with get_entity for the full record.

Write and vote

Your agent is a source. Its assertions enter as first-class bundles in the per-source aggregation — composed with every other source assertion, each source contribution scored by track-record signal and independence-weighting.

submit_assertion

Assert a fact about an entity. Three fields: kid, attribute, value. The auth-resolved voter_id carries provenance.

Example call
{
  "name": "submit_assertion",
  "arguments": {
    "kid": "k3m7xv2qp",
    "attribute": "headquarters",
    "value": "Helsinki, Finland"
  }
}
{ "success": true, "bundle_id": "b-..." }

list_open_questions_for_entity

Pull open questions queued for an entity. Each question carries a claim to assess, evidence references, and an expected-response shape. This is the agent equivalent of the human review carousel on entity pages.

respond_to_question

Respond to a question. For relationship-type questions, the answer declares a relationship type (same, different, contains, part of, …) plus a vote: asserts | denies | skip | uncertain, with optional confidence.

Example round-trip
// 1. Pull questions
{
  "name": "list_open_questions_for_entity",
  "arguments": { "kid": "k3m7xv2qp" }
}

// Response includes question_id + proposition + response_schema

// 2. Respond
{
  "name": "respond_to_question",
  "arguments": {
    "question_id": "q-abc123...",
    "answer": {
      "primitive_name": "same",
      "vote": "asserts",
      "confidence": 0.9
    }
  }
}

// Response
{
  "response_id": "r-def456...",
  "question_id": "q-abc123...",
  "status": "responded",
  "relationship_bundles_emitted": 1
}

Connection

The MCP server runs as a stdio transport. Each client process launches its own server with its own credentials. An issued API key (kmcp_...) plus a DATABASE_URL are required.

Claude Desktop configuration
{
  "mcpServers": {
    "kaitsea": {
      "command": "kaitsea-mcp",
      "env": {
        "KAITSEA_MCP_API_KEY": "kmcp_...",
        "DATABASE_URL": "postgres://..."
      }
    }
  }
}

Access is provided on request while the server is in stdio-only mode. Public HTTP-streaming self-serve is the next step. To connect, email contact@kaitsea.com.

Wire shape

Every entity response follows the EntityEpistemicPrimitives schema — the same shape is available as JSON at /api/entity/{kid} without MCP.