aafp-commons
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@aafp-commonswhat's the current world posture?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
AAFP Commons
AAFP Commons is a local signed knowledge notebook for software agents. Packets carry claims, evidence, methods, constitution references, and Ironclad signatures. Admission is policy-gated and objects are content-addressed.
Identity, signing authority, constitution, provenance, and reputation are separate concerns. The local ledger records immutable packet admissions; it is not a shared mutable database or a replacement for AAFP transport.
Operator and agent handbook: docs/HANDBOOK.md. Evidence, constitutions, and
review: docs/EVIDENCE.md, docs/CONSTITUTIONS.md, docs/REVIEW.md.
Real-workload preflight: docs/REAL-WORKLOAD.md.
Quick start
export COMMONS_HOME=/tmp/commons-demo
commons init
commons world
commons mcpIf the commons console script is not installed, use:
uv run --no-sync python -m aafp_commons mcpBefore writing, an agent should call commons_world and inspect posture.
Source posture is read-only. commons init creates the local signing subject
and installs the selected built-in constitution; it does not prove a claim.
Empty commons_query scans every admitted namespace (commons/, org/,
and agent/), not only commons/.
Related MCP server: agent-fact-system
MCP surface
The zero-configuration stdio server exposes:
commons_world, commons_query, commons_get,
commons_assume_constitution, commons_propose, commons_conflicts, and
commons_resolutions.
Proposals require evidence and a digest-pinned constitution. Read operations
do not require network access. commons serve binds loopback at
127.0.0.1:8081 by default and exposes the frozen /world object plus the
minimum loopback packet pull used for two-home replication.
Development
uv run --no-sync pytest -q
uv run --no-project ruff check src testsThe sibling local Ironclad checkout is used by uv in this development tree.
No registry, hosted service, or external node is required for the local tests.
Packaging
uv build produces a source distribution and a universal wheel from this tree:
uv buildArtifacts land in dist/:
aafp_commons-0.1.0.tar.gz— source distributionaafp_commons-0.1.0-py3-none-any.whl— wheel (bundlesprotocols/andconstitutions/viaforce-include)
Install the built wheel directly from source without any registry:
uv pip install dist/aafp_commons-0.1.0-py3-none-any.whlNo publish, registry upload, or external index is required.
Available Tools
7 toolscommons_assume_constitutionA
Validate the constitution selected by commons init. Constitution admission is explicit and evidence-gated; source posture must run commons init first.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of explaining behavior. It states a validation requirement and a precondition, but it does not disclose whether the tool changes state, what happens on success or failure, what evidence is required, or what side effects 'assuming' a constitution has. The name implies an affirmative action that the description never clarifies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundant material. The core action is front-loaded, followed by the essential precondition and admission criteria. Every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter tool with no output schema, the description covers the main precondition and the gating philosophy. However, it does not describe what the agent should expect after invocation, such as validation result, error behavior, or whether invoking the tool changes the current constitution. Given the sibling tools, a bit more relationship context would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema is empty with full coverage. The description does not need to explain parameter meanings, and it correctly focuses on preconditions and intent instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Validate') and resource ('the constitution selected by commons init'), and it ties the tool to the init flow, which helps separate it from the sibling tools. However, the tool name 'assume_constitution' suggests adopting or activating a constitution, while the description says only 'Validate', leaving some ambiguity about the actual effect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit precondition: 'source posture must run commons init first.' This tells the agent when the tool can be invoked. It also explains the admission is 'explicit and evidence-gated.' It does not name alternatives or state when not to use it, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
commons_conflictsB
Read conflict IDs in the local world. Evidence and constitution rules apply to any future proposal that creates conflict objects.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. 'Read conflict IDs' clearly signals a non-mutating operation, and the note about future proposals reinforces that this tool does not create conflict objects. It does not specify output format or 'local world' semantics, but for a zero-parameter read the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence is concise and front-loaded. The second sentence adds domain context about proposals and rules, but it is tangential to executing the read and could confuse the agent about whether this tool is related to proposal creation. It is still short, so not severely overbuilt.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is low-complexity (no parameters), so a brief description can be adequate. However, 'local world' is undefined, no output schema exists to document the return shape, and the relationship to the sibling tools is not clarified. The description is minimally sufficient but leaves the agent to infer important context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters and 100% schema description coverage, so the baseline is 4. There are no parameters for the description to clarify, and no mismatch exists between the schema and prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read conflict IDs in the local world.' This makes the operation clear and separates it from mutation-oriented siblings like commons_propose and commons_resolutions, though it does not explicitly contrast with query/get siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no direct guidance on when to choose commons_conflicts over the sibling tools. The second sentence mentions future proposals and rule applicability, but never states 'use commons_propose to create conflicts' or 'use this to inspect existing conflicts only.' The intended invocation context is left largely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
commons_getA
Read one signed packet by content address. Writing requires evidence and a digest-pinned constitution.
| Name | Required | Description | Default |
|---|---|---|---|
| packet_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It does establish that this is a read operation and that writing requires evidence and a digest-pinned constitution, but it does not mention error behavior, authentication, or what the returned packet looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loads the core operation in the first sentence. The second sentence about writing is somewhat tangential for a read tool, but it is short and provides system-level context, so the overall structure remains efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool, the description covers the essential lookup key and operation, but it leaves gaps around output format, not-found/error cases, and what 'signed packet' fully means. The writing-related clause does not help complete the picture for invoking this read operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only exposes packet_id as a string with no description, so the phrase 'by content address' adds meaningful semantics: it tells the agent that packet_id is the content address. It does not specify address format or derivation, but for a single parameter this is useful compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a specific verb ('read'), a specific resource ('one signed packet'), and the addressing mode ('by content address'). It also implicitly distinguishes this tool from write/propose and query siblings by emphasizing a singular targeted read.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not state when to prefer this tool over alternatives such as commons_query or commons_propose. The sentence about writing requirements offers some system context but no explicit usage direction, prerequisites for reading, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
commons_proposeB
Sign and admit one packet. Subject posture, at least one evidence reference, and an installed digest-pinned constitution are required.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| ucan | No | ||
| claim | Yes | ||
| scope | No | ||
| method | No | ||
| license | No | ||
| evidence | Yes | ||
| namespace | Yes | ||
| confidence | No | ||
| visibility | No | ||
| author_agent_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral disclosure burden. It reveals required preconditions but does not explain side effects of 'admit,' whether the action is reversible, what permissions are needed, or what success/return looks like. This is a significant gap for a mutating tool without annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly worded sentence that front-loads the core action before listing prerequisites. There is no redundant filler, and every clause contributes information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 11 parameters, nested objects, no output schema, and no annotations, this one-sentence description is inadequate. It does not define what a 'packet' is, how parameters relate to it, what the output or follow-up behavior is, or how prerequisites are verified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 11 parameters and 0% schema description coverage, the description should compensate. It only hints at 'evidence reference' and 'subject posture,' which loosely map to evidence and claim, but it provides no meaningful guidance on the other nine parameters such as scope, method, license, confidence, visibility, or author_agent_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb phrase, "Sign and admit one packet," which identifies the action and resource. It does not explicitly contrast with siblings, but the action is clearly distinct from query/get/world/conflicts tools, so an agent can infer its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states prerequisites (subject posture, at least one evidence reference, installed digest-pinned constitution), which implies the conditions under which the tool is appropriate. However, it does not explicitly say when to use this tool versus alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
commons_queryA
Query exact packet IDs or scan a namespace prefix. An empty query scans every admitted namespace (commons/, org/, and agent/). Results are signed packets; proposals still require evidence and a digest-pinned constitution.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It adds meaningful behavioral context: empty-query scans all admitted namespaces, results are signed packets, and proposals still require evidence plus a digest-pinned constitution. Still, it does not explicitly state whether the operation is read-only, define packet structure, or mention permissions, leaving some ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler. The core query modes are front-loaded, followed by the empty-query behavior and then the result implications. Every sentence earns its place and the structure makes the most important information immediately visible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter query tool with no annotations and no output schema, the description covers the main usage modes, the empty-case behavior, and downstream proposal implications. It is slightly incomplete in not defining packet format or access requirements, but overall it gives an agent enough to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only a bare 'query' string with zero property description coverage. The description fully compensates by explaining that the parameter accepts exact packet IDs or a namespace prefix, and that an empty value scans every admitted namespace. This is a complete, valuable explanation of the single parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Query') with two clear modes: exact packet IDs and namespace prefix scanning, plus the resource being queried. It is clear on its own but does not explicitly differentiate from sibling tools like commons_get, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides useful context about empty-query behavior and the three admitted namespaces, implying when the tool is appropriate. However, it gives no explicit when-to-use versus alternatives or exclusionary guidance, relying on the agent to infer usage from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
commons_resolutionsB
Read resolution IDs in the local world. Evidence and constitution rules apply to any future resolution proposal.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It states that the tool reads resolution IDs and scopes them to the local world, but it does not describe return format, error behavior, or any limitations. The second sentence focuses on future resolution proposals rather than clarifying the behavior of this read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence is concise and front-loaded with the core action. The second sentence adds some contextual information about future proposals, but it is not essential to invoking this tool and slightly dilutes the focus.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple parameterless read tool, the description is minimally viable, naming the resource and action. However, it lacks any phrase about what the returned resolution IDs look like and does not provide enough guidance to confidently distinguish this from sibling read-style tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema coverage is effectively complete, so the description does not need to explain parameter behavior. The baseline for a parameterless tool is appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb and resource, 'Read resolution IDs in the local world,' so an agent can tell it is a read operation targeting resolution identifiers. It does not explicitly differentiate itself from siblings like commons_get or commons_query, which also sound like read operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance about when to use this tool versus alternatives such as commons_get, commons_query, or commons_world. The sentence about evidence and constitution rules suggests a connection to future proposals but does not explain when an agent should choose this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
commons_worldA
Read the local signed world. This is safe in source posture; writing requires an initialized subject, evidence, and a digest-pinned constitution.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It provides a useful safety signal ('safe in source posture') and notes writing preconditions, but it does not explain what output to expect or what the 'signed world' conceptually contains. This leaves meaningful behavioral gaps for a tool with no annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, with the core read action front-loaded. The second sentence earns its place by adding a safety caveat, and there is no filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless read tool, the essential action is present, but because there is no output schema and no annotations, the agent gets no return-shape or world-semantics information. Sibling differentiation is also absent, so the definition is adequate but not complete for confident selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero parameters, so there is nothing for the description to clarify; the baseline 4 applies. The description adds no parameter noise and does not mislead about inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb ('Read') and a specific resource ('the local signed world'), and distinguishes read behavior from writing by mentioning writing preconditions. It does not explicitly differentiate from the sibling read-like tools (query/get), but the 'world' resource is specific enough to orient an agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is the read-only way to access the local signed world and warns that writing has prerequisites, giving some usage context. However, it never names sibling tools or states when to prefer commons_world over commons_get or commons_query, so exclusions and alternatives are left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v0.1.0- First observed
commons_assume_constitution - First observed
commons_conflicts - First observed
commons_get - First observed
commons_propose - First observed
commons_query - First observed
commons_resolutions - First observed
commons_world
TDQS
Scored across 7 tools
The read tools are separated by scope: world reads the whole signed world, query searches by packet ID or namespace, and get retrieves one content-addressed packet. Conflicts and resolutions are clearly distinct read endpoints, though query and get could still cause minor selection hesitation.
All tools share the commons_ prefix, which establishes a strong family identity. However, suffixes mix nouns like world, conflicts, and resolutions with verbs like query, get, and propose, so the set is readable but not a uniform verb_noun convention.
Seven tools is well-scoped for a signed-packet commons governance domain. Each tool has a distinct role without redundant operations.
Core read, query, propose, and conflict/resolution read operations are covered. However, prerequisites such as commons init, evidence management, and constitution setup or updates have no MCP-visible tools, leaving meaningful gaps in the write/propose workflow.
Maintenance
Related MCP Connectors
Tamper-evident proof creation and verification for AI agents via MCP, A2A, and REST.
Governed personal world model and memory for your AI agent. Pair once, connect over MCP.
- memnodeOAuthdev.memnode
Persistent, inspectable memory for AI agents with lineage, correction, and a hosted MCP endpoint.
Guarded MCP server for agent-readable business truth, provenance, readiness, and discovery.
Related MCP Servers
- AlicenseAqualityBmaintenanceProvides a compiled knowledge substrate, extracting atomic claims from an append-only capture log and querying a bitemporal claim graph over MCP. Read-only by default, with opt-in writes for trusted sources.4MIT
- AlicenseBqualityCmaintenanceLocal-first knowledge system for reasoning agents, exposing facts, evidence, documents, retrieval, and audit history through a thin stdio MCP server.14MIT
- AlicenseNot gradedqualityAmaintenanceProvides evidence-oriented MCP service for cryptographically identified agents, bounded public contracts, privacy-preserving records, and append-only audit.Apache 2.0
- AlicenseAqualityBmaintenanceRetired snapshot of the former 15-tool Apache-2.0 beta. Use Living Stack Community for the free seven-tool proof edition; Complete Local is the paid runtime with memory, recovery, signed traces, release verification, and multi-agent workflows.14Apache 2.0