Engagement MCP
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., "@Engagement MCPcheck the gates and open items for the current engagement"
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.

Engagement MCP Template project homepage · Documentation
Expose a local engagement folder through a typed MCP interface with audience filtering and human-controlled gates.
Engagement MCP Template
A blank, reusable template for the engagement-MCP pattern: one engagement, one folder, one MCP server that serves the job's shared structured language to an agent client — read-only by default, local only.
The pattern
Topology. One engagement = one root folder holding an ontology (JSON), plan documents (Markdown), and an intake ledger (JSONL). A single FastMCP stdio server sits in front of it. Every client — a Hermes agent, a cron job, a partner-facing view — connects to the same engagement through that one MCP interface. The server has no network listener or outbound integration. The connected client may forward tool results to its configured model; choose that client deliberately.
Ontology. The job's shared structured language: nodes with ids, classes,
and typed links. The template ships with generic classes — client,
engagement, deliverable, document_slot, gate, open_item — and the
server code carries zero engagement-specific content. Instantiating for a new
job means swapping the ontology and docs, not editing the server.
Gates. Conditions that must clear before work runs. gate_check walks
gated_by / depends_on and reports what blocks an action — it never
approves anything. Approval stays human.
Audience filtering. Nodes and docs are marked shared or internal.
Running with ENGAGEMENT_AUDIENCE=shared hides everything internal, so the
same server can back a partner view without leaking firm-only items.
Writes. Read-only by default. Exactly one write tool (log_document)
appends to the local intake ledger, and it is disabled unless
ENGAGEMENT_ALLOW_WRITE=1.
Related MCP server: CAgneT Knowledge
Quickstart
Use Python 3.11+ in an isolated environment. The package deliberately pins the
official SDK v1 FastMCP interface
to mcp<2; do not install it into an existing agent runtime.
python -m venv .venv
. .venv/bin/activate
# Windows PowerShell instead: .\.venv\Scripts\Activate.ps1
python -m pip install -e ".[dev]"Create a private instance outside this repository, then initialize it:
mkdir -p /absolute/path/to/example-job/plan/ontology
cp ontology/ontology.example.json /absolute/path/to/example-job/plan/ontology/ontology.json
cp docs/workplan.md docs/document-request-list.md /absolute/path/to/example-job/plan/
export ENGAGEMENT_ROOT=/absolute/path/to/example-job
export ENGAGEMENT_AUDIENCE=internal # or: shared
# export ENGAGEMENT_ALLOW_WRITE=1 # only if you want the intake write tool
python engagement_mcp.py # stdio MCP serverRun the smoke test (uses the example ontology, no engagement root needed):
python -m pytest tests/test_smoke.py # or: python tests/test_smoke.pyInstantiating for a new job
Create the engagement root folder; under it make
plan/ontology/and put yourontology.jsonthere (start fromontology/ontology.example.json).Copy the
docs/stubs intoplan/and fill them in.Point
ENGAGEMENT_ROOTat the root; launch the server from your MCP client config (below).Use
run_checkfor built-in reference validation; it never executes job scripts.Keep the rules: gates stay unmet until a human marks them met; every incoming document maps to a
document_slot; nothing outward-facing happens without an explicit human go.
Hermes mcp_servers config snippet
Placeholder — adjust paths and the venv interpreter:
mcp_servers:
engagement:
command: "C:/path/to/template/.venv/Scripts/python.exe"
args: ["C:/path/to/template/engagement_mcp.py"]
env:
ENGAGEMENT_ROOT: "C:/path/to/engagements/example"
ENGAGEMENT_AUDIENCE: "internal"
# ENGAGEMENT_ALLOW_WRITE: "1"Tools and boundaries
Eight read tools are registered by default: job_overview, get_node, find,
open_items, gate_check, read_doc, intake_status, and run_check.
log_document is registered only for an internal server with the write flag set
exactly to 1. Configuration is fixed when the process starts. Unknown audience
values fail closed. .env.example is documentation; the server does not load it.
On PowerShell, set $env:ENGAGEMENT_ROOT = 'C:/path/to/example-job' and use the
same $env: syntax for audience and the write flag. The installed
engagement-mcp command is equivalent to python engagement_mcp.py.
Shared mode removes hidden relationship IDs and lists only whitelisted document
names. Unavailable prerequisites block conservatively without revealing their IDs.
A gate marked met still does not grant approval: all gate results include
approved: false. Intake receipts do not automatically change a gate's status.
read_doc returns at most 12,000 characters and rejects files larger than 2 MB.
Host filesystem permissions protect this local server. Anyone who can edit the ontology or change its environment controls what is shared. Mark complete nodes appropriately; do not place private prose inside a shared node. Keep documents as untrusted data, never instructions for the client. Use a separate process for each audience. Do not publish real job directories or intake ledgers.
Writes use an exclusive intake lock. If a writer crashes, verify no writer remains before manually removing a stale lock. File containment resolves symlinks and requires real directory boundaries. This is not a sandbox against a malicious local user who can replace files concurrently.
Sanitization
Before publishing a customized template, audit every tracked file and Git history for private names, absolute host paths, credentials, and engagement content. Keep your private search patterns outside the public repository:
git grep -n -i -f /private/audit-patterns.txtExpected: no matches in any tracked file, including this README. Audit the commit history before pushing as well.
Acknowledgments
This pattern runs alongside ecosystem tools we build with:
OpenAccountants: Michael Cutajar and team, openaccountants.com.
SlowBooks Pro: VonHoltenCodes, creator and maintainer.
Hermes: by Nous Research.
These are ecosystem credits, not bundled integrations or claims of endorsement.
License
MIT. Copyright Onyx Intelligence Systems. See LICENSE.
Available Tools
8 toolsfindA
Keyword search over node ids, labels, and notes. Optional class filter (client, engagement, deliverable, document_slot, gate, open_item, ...).
| Name | Required | Description | Default |
|---|---|---|---|
| cls | No | ||
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and it does disclose the searched fields, which is genuinely useful behavioral context. It says nothing about matching semantics (substring vs fuzzy, case sensitivity) or result ordering, and never states the search is read-only and side-effect free.
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 tight sentences, front-loaded with the purpose and followed by the filter detail. Nothing is padded and there is no 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?
An output schema exists, so return values need not be described. But for an unannotated tool with three undocumented parameters, the definition is silent on result limits, matching behavior, and how it relates to the other retrieval siblings — gaps an agent would notice when choosing between them.
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?
Schema description coverage is 0%, so the description must compensate. It adequately covers 'query' (which fields are searched) and 'cls', including useful example class values absent from the schema's untyped string. The third parameter, 'limit', is never mentioned, and it is unstated whether 'cls' accepts multiple classes.
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 concrete verb and search surface: keyword search over node ids, labels, and notes. That is far more specific than the bare name 'find'. It does not, however, distinguish this tool from siblings like get_node or open_items, which also surface nodes.
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?
Usage is only implied: the agent can infer 'use this to locate nodes by keyword'. The statement that search covers ids, labels and notes (not document bodies) hints that read_doc is the alternative for content lookups, but that boundary is never made explicit and no when-not guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gate_checkC
Report gates and incomplete dependencies, conservatively hiding restricted prerequisites.
Cycles and unresolved references are blockers. No result grants human approval.
| Name | Required | Description | Default |
|---|---|---|---|
| node_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It usefully discloses that restricted prerequisites are conservatively hidden, that cycles and unresolved references are blockers, and that no result grants human approval, but it does not explicitly state whether the operation is read-only or describe permissions, side effects, or output behavior.
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 text is short and front-loads the core action, with no filler. However, the phrasing is dense and somewhat cryptic, and the second sentence's caveat could be clearer.
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?
There are no annotations and no output schema, so the description needs to be fairly complete. It covers some behavioral caveats but omits what the required node_id means, what a 'gate' is, what the report contains, and whether the operation is read-only, leaving significant gaps.
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 only parameter, node_id, has 0% schema description coverage and is not mentioned in the description at all. The description therefore does not compensate for the missing schema semantics.
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 says it reports gates and incomplete dependencies, which gives a verb and a domain resource, but 'gates' and 'restricted prerequisites' are not explained, so the purpose remains somewhat vague. It also does not differentiate this tool from siblings such as run_check or open_items.
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 no guidance on when to call gate_check versus alternatives like open_items or run_check. It states that cycles and unresolved references are blockers and that no result grants human approval, but these are interpretation caveats rather than usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_nodeC
Return a visible node and backlinks, omitting restricted relationship IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| node_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose a real behavioral trait: results are filtered by visibility and restricted relationship IDs are omitted, which signals access-control behavior. However it says nothing about permissions required, what happens for a missing or inaccessible node, or pagination/return shape.
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?
One compact sentence with no filler, and the result scope plus the filtering caveat are front-loaded. It is efficient, though its brevity comes at the cost of detail rather than being genuinely complete.
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?
No annotations, no output schema, and an undocumented parameter mean the description is the only source of truth, and it covers only the filtering behavior. An agent still lacks the identifier format, error behavior, and return structure needed to call this reliably.
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?
Schema description coverage is 0% for the single required parameter, so the description must compensate and it does not. node_id's expected format, provenance, and whether it is a graph node, document, or record identifier are never explained.
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?
It names a verb ('Return') and a resource ('node and backlinks'), so the basic operation is inferable. But 'node' is undefined in a sibling set that includes find, read_doc, and open_items, so an agent cannot tell what kind of object a node is or how this differs from read_doc without guessing.
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 statement of when to use this tool versus find, read_doc, or open_items, and no prerequisite guidance (e.g., where a node_id comes from). Usage is left entirely to inference from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
intake_statusA
Which document slots have something logged in the intake ledger, and which are still empty.
| 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. It discloses the content of the response (populated vs. empty slots) but never states that it is read-only, whether it mutates the ledger, or how the statuses are represented, so key behavioral traits are left to inference.
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?
A single compact sentence with no padding, front-loading the resource being inspected. The phrasing ('something logged in the intake ledger') is slightly indirect but not wasteful.
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 zero-parameter read with no output schema, the description conveys the essential shape of the result (slot-level filled/empty status). A brief note on the return format or on read-only safety would close the remaining gap.
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 takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. No parameter guidance is needed or missing.
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 names a specific resource (document slots in the intake ledger) and states exactly what it reports: which slots have entries and which are empty. That is enough to distinguish it from siblings like open_items or read_doc, though it never explicitly contrasts itself with them.
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?
Usage is only implied: an agent can infer this is the completeness check for intake, but there is no statement of when to prefer it over open_items, job_overview, or find, and no prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
job_overviewA
One-screen status of the engagement: node counts by class, gate states, HIGH-severity items, and open decisions. Read-only.
| 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 burden — and it explicitly labels the tool 'Read-only', which is the key safety fact for an agent. It also discloses the shape of what comes back (counts, states, severity-filtered items), though it says nothing about freshness or scope of the snapshot.
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 sentences, front-loaded with the resource and scope, then the contents, then the safety flag. No filler.
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?
With no output schema and no parameters, the description must convey what the agent gets back, and it does by listing the four content areas. Minor gap: no mention of how current the snapshot is or whether it covers all jobs or one.
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 to disambiguate; baseline is 4. The description correctly implies the tool takes no arguments by describing a fixed, whole-engagement view.
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 concrete resource ('one-screen status of the engagement') and enumerates its contents: node counts by class, gate states, HIGH-severity items, open decisions. That distinguishes it from get_node (single node) and read_doc, though overlap with open_items and gate_check is left unaddressed.
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?
Calling it a 'one-screen status' implies it is a first-look summary, but the description never says when to prefer it over open_items or gate_check, nor any prerequisite or exclusion. Usage is inferable, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_itemsB
Every open item in the ontology: open_items, unmet gates, and HIGH-severity nodes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden and discloses almost no behavioral traits. The word 'Every' implies an exhaustive, unfiltered result set, which is a useful hint, but there is no information about ordering, result size, whether the three categories are merged or grouped, or any permission requirements.
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?
A single front-loaded sentence with a colon-delimited enumeration; no filler and no repetition. It is appropriately sized for a zero-argument tool.
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?
There is no output schema, so the description is the only source of return-value information, and it does name the three content categories it aggregates. However, the shape of the result (per-category grouping, counts, node identifiers, severity of the 'open_items' vs the other buckets) remains undefined for a tool whose whole value is the returned list.
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 takes zero parameters, so there is nothing parameter-level to document; baseline 4 applies. The description does not mislead about any 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?
Names the resource (every open item in the ontology) and enumerates its three constituent categories: open items, unmet gates, and HIGH-severity nodes. That is specific enough to distinguish it from a single-node lookup or a gate check, though no sibling is named explicitly as an alternative.
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 statement of when to use this tool versus gate_check, run_check, or find, and no exclusions or preconditions. The agent must infer that this is a broad 'what needs attention' sweep rather than a targeted query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_docC
Read bounded UTF-8 text by document stem; shared mode lists only shareable documents.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| offset | No | ||
| max_chars | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does carry real weight: it discloses UTF-8 decoding, output bounding, and that shared mode restricts visibility to shareable documents. It does not say what happens for a missing/unreadable stem, whether truncated output is signaled, or whether access is permission-gated.
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?
A single dense sentence with the primary operation front-loaded before the mode caveat. Compact and mostly waste-free, though the shared-mode clause is cryptic enough that it costs more confusion than it saves space.
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?
A three-parameter read tool with zero annotation and zero schema description coverage and no output schema needs to explain pagination via offset, the truncation contract, and error behavior. The description covers only the happy-path read and leaves the rest implicit.
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?
Schema coverage is 0%, so the description must compensate and largely does not: "document stem" hints at the name parameter and "bounded" hints at max_chars, but the offset parameter for paging through long documents is never mentioned, nor are defaults or units.
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 specific verb and resource ("Read bounded UTF-8 text") and the lookup key ("document stem"), which is more than the name alone conveys. The trailing "shared mode lists only shareable documents" blurs the line between reading and listing, but the core operation is unambiguous.
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?
No guidance on when to use this rather than siblings like get_node or find, and no prerequisites stated. "shared mode" is invoked with no explanation of how a caller selects it or what it changes about the call, leaving the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_checkB
Validate graph links and visible approval gates without running any local program.
| 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 must carry the full behavioral burden. It does disclose a meaningful trait: validation happens 'without running any local program,' implying a safe, non-executing check. However, it says nothing about return values, failure behavior, permissions, or side effects.
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?
It is a single front-loaded sentence with no wasted words. The validation target and the no-local-execution constraint are both stated efficiently.
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 zero-parameter validation tool with no output schema, the description is only partially complete. It explains what is checked but not what the check returns or how failures are reported, so an agent cannot fully predict the result.
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 takes zero parameters, and the schema is empty. The description does not need to explain parameters, so the baseline is 4.
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 and scope: 'Validate graph links and visible approval gates.' That is clear enough to distinguish it from most siblings, but it does not explicitly differentiate itself from the closely related gate_check tool.
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?
It implies usage by saying what gets validated, but it gives no explicit when-to-use or when-not-to-use guidance. It especially fails to clarify how it relates to or differs from the sibling gate_check tool.
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.
8 tool updates
v0.1.0- First observed
find - First observed
gate_check - First observed
get_node - First observed
intake_status - First observed
job_overview - First observed
open_items - First observed
read_doc - First observed
run_check
TDQS
Scored across 8 tools
The core resource/action pairs are mostly understandable, but job_overview, open_items, gate_check, and run_check overlap around gate states, HIGH-severity items, and validation. Descriptions help separate summary vs listing vs validation, but an agent can still reasonably hesitate among several tools for a status or gate query.
All names use lowercase snake_case, which is readable, but the semantic patterns are mixed: verb_noun (get_node, read_doc), noun_phrase (job_overview, open_items, intake_status), and single verb (find). The convention is not chaotic, but it is not predictably consistent.
Eight tools is a well-scoped size for a read-only engagement oversight server. Each tool appears to earn its place across overview, search, node inspection, open items, gates, validation, intake, and document reading.
The surface covers the apparent read-only domain well: status, search, node retrieval, open items, gate validation, intake tracking, and document reading. Minor gaps remain, such as no explicit broad node listing beyond keyword search, but agents can mostly work around this via find and get_node.
Maintenance
Related MCP Connectors
Read-only gateway for durable agent identity, consent, recognized work, and signed receipts.
Agent-native notes, tasks, dev-docs, vaults, sync & handoffs. MCP + OpenAPI dual surface.
Host an agent's pages at clean, permanent URLs. Publish, organize, edit, search and re-find docs.
Tenant-scoped control layer for agent-to-agent systems: governed routing, approvals, evidence.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceProvides a local-first, evidence-backed ledger for physical property, enabling agents to search inventory, prepare capture reviews, and inspect proposals through MCP. Enforces strict boundaries: scoped reads by default, with private write access limited to preparing, not applying, mutations.MIT

CAgneT Knowledgeofficial
FlicenseNot gradedqualityCmaintenanceEnables grounded read-only queries over a local knowledge base, reviewable pending updates, and audited merging of changes.-- AlicenseBqualityBmaintenanceEnables software agents to maintain a signed, evidence-aware local ledger of claims, with policy-gated proposals, conflict queries, and constitution-pinned access through an MCP stdio server.73Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables agents to query a single-source ontology of types, entities, statements, evidence, and controlled vocabulary, including bitemporal "as of" and "as recorded" fact lookups. Supports writing by letting agents propose candidate statements while keeping approval, review transitions, and authoritative reasoning restricted to approved facts.MIT