KG-SSOT

Registre officiel Autres

Verifiable knowledge graphs: validate and store .kg.yaml and .kg.json under the KG-SSOT contract.

Installation

Ajoutez ceci à la configuration MCP de votre client (Claude Desktop : claude_desktop_config.json ; Cursor : .cursor/mcp.json ; VS Code et les autres utilisent la même forme « mcpServers »).

PYPI package kg-ssot
Claude Code
claude mcp add kg-ssot -- uvx kg-ssot==4.34.0
Configuration JSON (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "kg-ssot": {
            "command": "uvx",
            "args": [
                "kg-ssot==4.34.0"
            ]
        }
    }
}
MCPB package https://github.com/marciocar/kg-ssot/releases/download/kg-ssot-v4.34.0/kg-ssot-4.34.0.mcpb

Documentation

Tirée du README du projet sur GitHub, actualisée chaque semaine. Les liens ouvrent GitHub.

Sommaire
  1. KG-SSOT
  2. Why
  3. Get started in 60 seconds
  4. Install
  5. A node, inside
  6. Use it from an AI agent
  7. How it works
  8. Features
  9. What KG-SSOT is not
  10. Status
  11. Documentation
  12. Contributing
  13. License

KG-SSOT

Verifiable knowledge graphs in plain text: every claim says where it came from, when it was last verified and what depends on it, and your CI rejects the ones that don't.

English | Português (Brasil)

Manual · Adopt it · The contract · Conformance suite · Changelog · For AI agents


Why

Teams, of people or of agents, pile up conclusions: "the retry is idempotent", "we decided on three attempts". They live in meeting notes, tickets and chat memories, and on the way they lose three things: the source, the date it was last verified and what depends on it. A convincing sentence without any of the three passes a hurried review.

KG-SSOT treats this as a format problem, not a discipline problem. Knowledge lives in a .kg.yaml graph, versioned next to the code, and a formal contract decides in CI what fails:

  • a confirmed or production node without provenance fails (a claim with no recoverable source is declared unverifiable instead);
  • a source that is only a placeholder (unknown, n/a, tbd) fails;
  • an edge that points nowhere fails, and so does a node with no edges;
  • a verification stamp with nothing to check against, a decision with no origin and a production claim backed only by testimony raise warnings.

Get started in 60 seconds

pip install kg-ssot

# the conformance suite against the reference reader, from the installed package
kg-conformance | tail -2

# one valid graph and one that fails
kg-validate valid.kg.yaml broken.kg.yaml

Or straight from the repository, with hash-checked dependencies:

git clone https://github.com/marciocar/kg-ssot && cd kg-ssot
python3 -m venv .venv && .venv/bin/pip install --require-hashes -r tools/requirements.txt
.venv/bin/python3 -I tools/kg_validate.py \
  spec/conformance/fixtures/latest/form/minimal/valid-minimal.kg.yaml \
  spec/conformance/fixtures/latest/form/minimal/bad-node-missing-label.kg.yaml
PASS spec/conformance/fixtures/latest/form/minimal/valid-minimal.kg.yaml
FAIL spec/conformance/fixtures/latest/form/minimal/bad-node-missing-label.kg.yaml
  MUST   form.required.node.label ×1
· 2 files; 1 pass the MUST; 0 with a SHOULD warning (kg-contract-v4.schema.json + kg-contract-v4.should.schema.json)

The tools print in English by default and in Brazilian Portuguese when your locale is pt_BR (or KG_SSOT_LANG=pt-BR). Codes, exit codes and JSON keys never change with the language; only the human text does.

Install

ChannelCommandWhat you get
PyPIpip install kg-ssotThe commands kg-validate, kg-conformance, kg-gate, kg-store, kg-query, kg-diff, kg-vocab, kg-criterion, kg-audit, kg-trace, kg-mcp and kg-prov-export, with the contract and the suite inside
npmnpm install kg-ssotThe JavaScript reader with a precompiled validator, which also runs in React Native and Expo
Claude Desktopthe .mcpb file from the latest releaseThe MCP server as a one-click extension
MCP Registryio.github.marciocar/kg-ssotThe same server for any MCP client
Containerdocker pull ghcr.io/marciocar/kg-ssotThe MCP server as a service next to a client without Python, such as LibreChat
Your repositorykg_vendor.py update --tag kg-ssot-v4.25.0The release vendored by tag, with a sha256 stamp, and the gate in your CI (manual, chapter 6)

A node, inside

- id: C_RETRY_SAFE
  node_type: claim
  plane: PROD
  status: confirmed
  impact: 4
  confidence: 0.8
  label: The payment retry is idempotent.
  verified_at: "2026-10-01"
  verified_against: tests/payment_retry_test.py
  provenance:
    source: tests/payment_retry_test.py
    locator: test_retry_is_idempotent
    method: "medição: integration test in CI"

The label is the claim, short. The provenance says where it came from and how: one of five method classes, medição (measurement), leitura (reading), juízes (judges), derivado (derived) or testemunho (testimony). The stamp says when it was verified and against what. The method classes are literal values of the contract and stay as written.

Use it from an AI agent

The reference MCP server gives a model the contract and a store: it validates a graph, writes only what passes, reads, lists, queries with every edge resolved to the label on the other end, and shows history. Read-only tools are annotated as such, so a client can skip confirmation for them.

kg-mcp --root ./graphs          # stdio, for Claude Desktop, Claude Code and other MCP clients

kg_schema_help returns the current contract, a minimal passing example and the fixes for the most common codes, so a model can write a passing graph on the first try. llms.txt indexes the documentation for agents, and llms-full.txt has all of it in one file.

How it works

flowchart LR
  subgraph product["Product (one tag kg-ssot-vX.Y.Z)"]
    C["Contract<br/>JSON Schema MUST + SHOULD<br/>+ integrity rules"]
    S["Conformance suite<br/>438 cases as plain data"]
    R["Reference reader<br/>kg_validate.py"]
    S -- "every reader passes" --> R
    C --> R
  end
  subgraph adopter["Adopter repository"]
    V["vendor/kg-ssot<br/>+ sha256 stamp"]
    G["kg_gate.py in CI<br/>per-graph ratchet"]
    K["the team's .kg.yaml"]
    V --> G
    K --> G
  end
  product -- "kg_vendor.py update --tag" --> V
  G -- "nothing gets worse:<br/>a new graph passes,<br/>debt only shrinks" --> PR["PR approved"]
  1. The contract is JSON Schema 2020-12 at two levels: MUST fails, SHOULD warns. The rules a schema cannot express (unique ids, existing edge ends, orphan nodes) are part of it.
  2. The suite is the compatibility proof: each case is a real YAML file with the expected verdict and codes, and a reader passes only if it emits exactly the same codes.
  3. The kit brings the contract to a repository by tag, with a stamp that fails local edits, and runs the per-graph ratchet in CI: what already failed becomes named debt, a new graph has to pass, and the debt only shrinks.

Features

Two-level contractMUST fails, SHOULD warns, with a ramp: what warns in one version can fail in the next, and the adopter sees it coming
Structured provenancesource, locator and method, with five evidence classes and the source locality (repo, web, host, pessoa, privado)
Verification stampverified_at and verified_against, with a warning for a stamp with no target and for a verification dated before the fact
Edges between graphsexternal_edges, with the far end checked against the corpus
Stable codesEvery violation has a code such as form.required.node.provenance, and --where names the node
Structured verdictkg_validate.py --format json returns the verdict with code, document path, line, message and fix hint, in a versioned format (spec/verdict.schema.json) for tools and MCP servers
Two formats, one model.kg.yaml to write and review in a diff, and .kg.json for runtime use (an app, a server), read by a JSON parser under the contract's JSON profile (RFC 8259, I-JSON, up to 128 levels, unique keys)
Gated storekg_store.py writes .kg.yaml or .kg.json to disk, a git repository or a versioned store, only after the contract passes, with external edges checked in the store and optimistic locking for concurrent writers
Reference MCP serverkg_mcp.py serves the contract and the store over MCP (stdio, or HTTP behind a proxy with per-identity areas), with tool annotations
Query and diffkg_query.py selects nodes across a whole corpus and projects every edge with the label on the other end, paginated (kg-ssot.query/1); kg_diff.py compares revisions by id, field by field, reading git without a checkout (kg-ssot.diff/1)
Domain vocabularyThe x_term profile gives each synonym its source, document version and verification date; kg_vocab.py resolves a text to its term, lists what is due, and exports to SKOS-XL and Apache Ossie (kg-ssot.vocab/1); the MCP server serves it as kg_terms. Since 4.23 a short code gets a readable name in its scheme (notation and scheme), and kg_vocab.py lint checks the codes in prose, with a ratchet
Pre-registered criterionx_criterion gives each version of a yardstick a node and a sha256, and x_measured_under ties a result to the version it was measured under; changing the yardstick after seeing the data shows up as a post-hoc warning, and kg_criterion.py checks the sha256 against the text or the file (kg-ssot.criterion/1)
The trace that resolveskg_trace.py check --root . checks each node's trace: anchor against the files of the repository (integrity.trace-target-missing, kg-ssot.trace/1), and counts apart what it does not judge
Audit package by questionkg_audit.py exports one row per questionnaire item (the x_questionnaire profile), with the question, the answer, the verdict, the required and the given evidence with its date and due date, the evidence requests (role: evidence_request and evidence_requirement), the contradictions, the owner, and the gaps it computes, in CSV, XLSX (no dependency), or JSON (kg-ssot.audit/1)
Data-only suite438 cases with their own metaschema, in the style of the JSON-Schema-Test-Suite
Per-graph ratchetAdopt without a big-bang migration: inherited debt stays named and only shrinks
Vendor by tagNo copy-paste, no shared code: one sha256 stamp per file
Profile-driven migratorkg_migrate.py proposes the provenance the contract asks for, from rules the adopter declares, shows the plan first and writes with node-by-node invariance
PROV-O bridgekg_prov_export.py exports each node's provenance as prov:Entity and prov:Derivation in JSON-LD, for the W3C PROV ecosystem
No platformPython 3.11 or later, PyYAML and jsonschema, installed with checked hashes (--require-hashes). No server, editor or assistant required

What KG-SSOT is not

If you need......use something elseWhat KG-SSOT gives you
A query language over a large graphA graph databaseA file format and a contract, with no server
Semantic web interoperabilityRDF, OWL, SHACLA small, closed YAML vocabulary that reads well in a diff, and a PROV-O export
Enterprise search over documentsA search platformNo connectors or index: only the graph the team writes
A guarantee that a claim is trueHuman review, testsThe guarantee that it says where it came from and when it was verified

Status

  • Current: contract v4, release kg-ssot-v4.25.0. The reference reader passes 424 of 438 cases in latest/.
  • In use: three adopters run the gate in CI, one of them in production.
  • Next: v5 will fail a method outside the <class>: <detail> form, which only warns today.
  • Open: the semantic layer (freshness, contradiction, domain completeness) lives in optional/, and the reference reader does not implement it: it passes only the 10 valid cases there.

Documentation

ManualConcepts, format, contract, tools, recipes and troubleshooting
ADOPTING.mdThe complete adoption guide, with every edge case
The contractContract v4: the two levels, the codes and what changes between versions
spec/conformance/The suite format, the codes and how to measure a reader in another language
CHANGELOG.mdEvery release, newest first
llms.txt · llms-full.txtFor AI agents: the index with links, and the whole documentation in one file

Contributing

A contract change starts with a conformance case: the .kg.yaml that shows the behavior and the expected verdict. Releases are tags kg-ssot-vX.Y.Z of the development repository, where every pull request that touches spec/ or tools/ runs the suite and the kit tests in CI. The release mirror holds only what each tag ships, one commit per tag, and does not take pull requests: a proposal or a bug goes in as an issue, ideally with the case that shows it. A reader in another language is welcome: chapter 7 of the manual explains how to measure it.

License

The product (what the release ships, listed in spec/release.json: the contract, the suite, the .kg.yaml cases, the kit in tools/, ADOPTING.md, this README and the manual) is Apache-2.0: LICENSE, with the scope in NOTICE.

KG-SSOT was born inside the Onion framework, which now adopts it by tag like any other adopter. The product does not depend on it.

Questions fréquentes

Qu'est-ce que KG-SSOT ?

Verifiable knowledge graphs: validate and store .kg.yaml and .kg.json under the KG-SSOT contract.

Comment installer KG-SSOT ?

Il s'exécute sur votre machine. Dans Claude Code : claude mcp add kg-ssot -- uvx kg-ssot==4.34.0. Pour les autres clients, collez la configuration JSON de cette page dans leurs réglages MCP.

Faut-il une clé API pour KG-SSOT ?

Son entrée au registre n'indique aucune clé ni secret obligatoire. Certaines fonctions peuvent tout de même demander un compte auprès du service auquel il se connecte.

KG-SSOT est-il open source ?

Oui. Son code est sur GitHub sous licence Apache-2.0.

Qui maintient KG-SSOT ?

Il est publié par marciocar. AI.tn le référence sans le maintenir ni le recommander.

Issu du registre MCP officiel. Être listé n'est pas une recommandation : vérifiez le code et les permissions d'un serveur avant de lui donner accès à vos données.