mcpField
G
GRAFOMEM CGR Capture

GRAFOMEM CGR Capture

Local
grafomem.comMemory & Knowledge3Updated 2w ago

About GRAFOMEM CGR Capture

GRAFOMEM CGR Capture is an MCP server for coding agents to record judgments and later outcomes in a GRAFOMEM Cloud tenant, linked by a chosen work_item_id. It only captures records; it does not calculate or display scores. An optional signature-envelope verifier is also included.

Key features

  1. 01Record judgments and later outcomes
  2. 02Link records with work_item_id
  3. 03Attribute judgments to configured roles
  4. 04Pin and verify the tenant target
  5. 05Optional two-party signature verifier

Use cases

  1. 01Record deployment-safety judgments and outcomes
  2. 02Track whether scan or review findings were correct
  3. 03Build attributable records for later scoring

MCP support

It provides tools through a stdio MCP server for coding agents to record judgments and outcomes in a specified GRAFOMEM Cloud tenant. It does not calculate or retrieve scores, or block or approve actions.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"com-grafomem-cgr-capture": {
"command": "uvx",
"args": [
"grafomem-cgr"
],
"env": {
"GRAFOMEM_CGR_TENANT_KEY": "<GRAFOMEM_CGR_TENANT_KEY>",
"GRAFOMEM_CGR_TENANT": "<GRAFOMEM_CGR_TENANT>",
"GRAFOMEM_CGR_ROLE_KEYS_JSON": "<GRAFOMEM_CGR_ROLE_KEYS_JSON>",
"GRAFOMEM_CGR_ROLE_KEYS": "<GRAFOMEM_CGR_ROLE_KEYS>",
"GRAFOMEM_CGR_FORBIDDEN_TENANTS": "<GRAFOMEM_CGR_FORBIDDEN_TENANTS>",
"GRAFOMEM_API": "<GRAFOMEM_API>"
}
}
}
}
Run commanduvx grafomem-cgr
Environment variables to set
GRAFOMEM_CGR_TENANT_KEYSecretYour GRAFOMEM Cloud tenant API key (X-API-Key). Needs decisions:read for the durability guard.
GRAFOMEM_CGR_TENANTThe tenant id you expect that key to resolve to. If the key resolves to any other tenant, every write is refused.
GRAFOMEM_CGR_ROLE_KEYS_JSONSecretRole handles to public agent_key (64-hex Ed25519), inline as JSON. Example: {"cc-builder@acme":"<64-hex>"}. Use this or GRAFOMEM_CGR_ROLE_KEYS.
GRAFOMEM_CGR_ROLE_KEYSSecretPath to a JSON file with the same role-handle to public agent_key mapping. Use this or GRAFOMEM_CGR_ROLE_KEYS_JSON.
GRAFOMEM_CGR_FORBIDDEN_TENANTSComma-separated tenant ids to always refuse, even if pinned by mistake. Put your production tenant here.
GRAFOMEM_APIGRAFOMEM Cloud base URL. Defaults to https://api.grafomem.com.

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
pypigrafomem-cgr0.1.0

Tools

No tool list yet

Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.

Details

From the project README

grafomem-cgr

An MCP server that lets a coding agent record its own judgments and how they turned out, against your GRAFOMEM Cloud tenant.

The model is capture now, score later. Every time your agent makes a call it could be wrong about — "this deploy is safe", "this scan is clean", "this review finding is real" — it records the judgment. Later, when reality settles, it records the outcome. The two are joined by a work_item_id you choose. What accumulates is an append-only, attributable record of judgments and their results.

This package is the capture half only. It writes to your tenant; it does not compute, serve, or display scores.

cgr.cosign.v1 verifier (optional extra)

Beside the capture client, this package also ships a reference verifier for the cgr.cosign.v1 two-party co-signature envelope — grafomem_cgr.cosign_verify.verify(record, registry, ledger, trusted_issuers), implementing docs/cgr/cgr-cosign-v1-spec.md §8 (amended by decisions 0010 and 0011). trusted_issuers is required (§8.2a issuer pinning): a collection of issuer key ids with no default and no trust-everything path — omitting it or passing an empty set rejects, rather than trusting the record's self-declared issuer. It is the second, independent reference implementation (the first is @gns-foundation/cgr-verify, JS); both pass the same 28-vector conformance corpus at conformance/cgr-cosign-v1/ with zero verdict disagreements. Install its deps with the extra:

pip install grafomem-cgr[verify]      # rfc8785 + cryptography

Capture does not depend on it; the extra is verifier-only.

What it is not

  • It does not score anything at capture time, and it does not read scores back into your session.
  • It does not make your agent safer or gate anything. Nothing is blocked, approved, or prevented.
  • It is not a compliance, audit, or security product.
  • Scoring on GRAFOMEM Cloud is single-dimension today: all judgment/certify decisions score under one dimension regardless of domain. The domain you pass is stored durably per decision (see below), so it can be attributed later — but it is not scored separately yet.

Requirements

A GRAFOMEM Cloud account. The free tier is sufficient — expected volume is a handful of decisions per day. Note that governed decisions meter as real usage on your plan; the server prints your current usage on startup so this is never a surprise.

Install & configure

One command, plus environment variables — no repo checkout, no launcher script.

Claude Code:

claude mcp add grafomem-cgr --scope user \
  --env GRAFOMEM_CGR_TENANT_KEY=sk_your_api_key \
  --env GRAFOMEM_CGR_TENANT=your_tenant_id \
  --env GRAFOMEM_CGR_ROLE_KEYS_JSON='{"cc-builder@acme":"<64-hex public key>"}' \
  -- uvx grafomem-cgr

Or any MCP client that reads a JSON config:

{
  "mcpServers": {
    "grafomem-cgr": {
      "command": "uvx",
      "args": ["grafomem-cgr"],
      "env": {
        "GRAFOMEM_CGR_TENANT_KEY": "sk_your_api_key",
        "GRAFOMEM_CGR_TENANT": "your_tenant_id",
        "GRAFOMEM_CGR_ROLE_KEYS_JSON": "{\"cc-builder@acme\":\"<64-hex public key>\"}"
      }
    }
  }
}
Environment
VariableRequiredMeaning
GRAFOMEM_CGR_TENANT_KEYyesYour tenant's X-API-Key. Needs decisions:read for the durability guard.
GRAFOMEM_CGR_TENANTyesThe tenant id you expect that key to resolve to. If the key resolves anywhere else, every write is refused.
GRAFOMEM_CGR_ROLE_KEYS_JSONone ofRole handles → public agent_key, inline as JSON.
GRAFOMEM_CGR_ROLE_KEYSthese twoSame mapping, as a path to a JSON file.
GRAFOMEM_CGR_FORBIDDEN_TENANTSnoComma-separated tenant ids to always refuse, even if pinned by mistake. Put your production tenant here.
GRAFOMEM_APInoBase URL. Defaults to https://api.grafomem.com.
Role keys

A role handle (cc-builder@acme) is the identity a judgment is attributed to. Its agent_key is a stable Ed25519 public key, 64 hex characters — the subject the record binds to. Generate one per role:

openssl genpkey -algorithm Ed25519 -out cc-builder.pem
openssl pkey -in cc-builder.pem -pubout -outform DER | tail -c 32 | xxd -p -c 64

Keep the private half. This version does not use it — it binds to the public key only — but per-decision proof-of-possession is planned hardening, and holding the private key is what will let you prove the identity is yours.

Tools

cgr_record_decision — record a judgment.

arg
work_item_idstable join key you choose (PR number, task id, run id)
agent_handleone of your configured role handles
domaindeploy-verification | security-scan | adversarial-review
decisioncertify | reject
verifiability_tagjudgment (default) | rule
reason_code, reason_textoptional
agent_confidenceoptional, accepted but not yet persisted — see below

agent_confidence is accepted by the tool schema for forward compatibility but is not currently written to the decision record. Don't rely on it being stored.

Only judgment + certify moves a score. A rule decision is deterministic and carries no reputational weight — tag honestly.

cgr_record_outcome — record how it turned out.

arg
work_item_idthe same join key used at decision time
resulta result label, e.g. deploy_succeeded, ci_failed, vuln_found, review_confirmed
sourceoptional provenance string

An unrecognised result is a deliberate no-op. The decision stays pending rather than being resolved on a guess — falsely resolving a decision corrupts the record permanently. Mapped labels are: deploy_succeeded, deploy_healthy, ci_passed, migration_applied, merge_landed, pr_merged, scan_clean, no_vuln_confirmed, review_confirmed, finding_correct, bug_confirmed (success); deploy_failed, deploy_rolled_back, migration_failed, ci_failed, merge_reverted, vuln_found, secret_found, review_refuted, finding_wrong, bug_not_real (failure).

Safety properties

  • Tenant pinning. You declare the tenant up front. The pin is enforced at startup and re-checked against the tenant the API actually resolved on every decision response — so a rotated or mistaken key cannot quietly write somewhere else.
  • Denylist. GRAFOMEM_CGR_FORBIDDEN_TENANTS refuses named tenants outright.
  • Key custody. The caller picks a role handle; the server injects that role's key. A tool call can never supply an arbitrary key or target another tenant.
  • Fail-open. If the server is misconfigured it exits non-zero and simply doesn't load. Your session continues unblocked, with no tools registered. A refused tool call returns an error as normal tool output rather than crashing the MCP server.
  • Domain durability. domain is sent as a dedicated field and stored server-side, per decision, in the never-encrypted CGR-readable decision parameters as cgr_domain — in the signed decision record, not in a client-side log. selftest includes a durability guard that re-reads the decision it just wrote and aborts loudly if cgr_domain did not round-trip, rather than silently recording a domainless decision.

CLI

grafomem-cgr                 # run the stdio MCP server (the default)
grafomem-cgr setup           # register your role identities on the tenant (idempotent)
grafomem-cgr selftest --handle cc-builder@acme --domain deploy-verification

selftest closes the loop once — decision → durability guard → outcome → score read — and prints the movement and the meter. Run it before wiring the server into a session.

Links

MIT licensed.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.