MEMGRAPH-MCP
에이전트 시스템
다음 기능을 갖춘 내구성 있는 멀티 에이전트 오케스트레이터:
명시적 실행 그래프 및 체크포인트/재개
오케스트레이터 제어 병렬 위임
제한된 연구 스웜 실행
코딩, 검토, 수정, CI 및 승인 루프
MCP 리소스와 도구를 통해 노출되는 백엔드 저장소의 프로젝트 메모리
메모리 검색을 위한 실제 SQLite 벡터 인덱스
Tavily를 지원하는 플러그인 가능한 외부 연구 백엔드
범위
이 구현은 공식 Python MCP SDK와 메모리 표면을 위한 FastMCP 서버를 사용하여 MCP 2025-11-25 사양 기준을 목표로 합니다. 로컬 개발을 위해 stdio를 통해 실행됩니다. 원격 배포는 docs/remote_auth.md를 참조하십시오.
Related MCP server: Continuum MCP Server
레이아웃
app/runtime: 실행 상태, 스케줄러, 오케스트레이터 루프, 체크포인팅app/planner: 계획 및 그래프 수정 도우미app/agents: 연구, 코드, 검토, 수정, CI, 합성, 승인을 위한 노드 실행기app/memory: SQLite 기반 메모리, 검색 및 아티팩트 인덱스app/mcp_server:FastMCP리소스, 도구, 프롬프트 및 서버 진입점tests: 승인 및 단위 테스트 커버리지
로컬 사용법
uv sync --group dev
uv run pytest
uv run agent-system-mcp검색 및 연구 백엔드
메모리 항목은
sqlite-vec을 사용하여 로컬 SQLite 벡터 테이블에 인덱싱됩니다.기본 임베딩 제공자는
auto입니다: 실제sentence-transformers모델을 우선 사용하며, 모델을 로드할 수 없는 경우에만 결정론적 해시 제공자로 대체됩니다.연구는 노드가
inputs.corpus를 제공할 때 인메모리 코퍼스 백엔드를 사용합니다.TAVILY_API_KEY가 설정된 경우, 코퍼스가 없는 연구 노드는 외부 웹 연구를 위해 Tavily 백엔드를 사용할 수 있습니다.코퍼스도 없고 Tavily 키도 없는 경우, 연구는 출처를 조작하는 대신 제한된 빈 결과를 반환합니다.
임베딩 구성
AGENT_SYSTEM_EMBEDDING_PROVIDER=auto|sentence-transformers|hashAGENT_SYSTEM_EMBEDDING_MODEL=sentence-transformers/all-MiniLM-L6-v2AGENT_SYSTEM_EMBEDDING_CACHE_DIR=/path/to/cacheAGENT_SYSTEM_EMBEDDING_LOCAL_ONLY=true|false
예시:
AGENT_SYSTEM_EMBEDDING_PROVIDER=sentence-transformers uv run agent-system create-run "improve scheduler"로컬 전송
개발은 MCP stdio 전송을 사용합니다.
원격 배포
원격 배포는 v1에서 의도적으로 문서화만 제공합니다. 서버는 OAuth 2.1 호환 동의 경로를 문서화하며 로컬 stdio를 기본 개발 모드로 유지합니다.
전체 문서
state.md: 현재 프로젝트 상태, 생성 이후 변경 사항 및 로드맵
docs/getting_started.md: 작동하는 로컬 실행 및 MCP 서버를 위한 가장 빠른 경로
docs/operator_guide.md: 전체 시스템 개요, 운영 및 모범 사례
docs/developer_custom_graphs.md: Python API 사용법, 사용자 지정 그래프 설계 및 노드 페이로드 참조
docs/codex_mcp_usage.md: 대규모 앱 계획, 메모리 및 체크포인트 실행을 위해 Codex가 이 MCP를 사용하는 방법
examples/plan_large_app.py: 대규모 앱 청사진 생성 및 프로그래밍 방식 실행 예시
Available Tools
10 toolscheckpoint_runBIdempotent
Apply a small state patch and create an explicit checkpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| state_patch_json | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the operation is non-read-only, idempotent, and non-destructive. The description adds the side effect of creating an explicit checkpoint, but does not explain overwrite behavior, persistence details, or any required permissions.
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 sentence with no filler, front-loading the action and outcome. Every word contributes to understanding the tool's purpose.
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 two required parameters and no schema descriptions, the description is too sparse. The agent still needs to infer how to construct state_patch_json and which run_id to target, and no usage context is given.
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 needed to compensate, but it only loosely references 'state patch'. It does not explain the required format of state_patch_json or the meaning/role of run_id beyond what the parameter names imply.
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 gives a specific verb ('Apply') and resource ('state patch'), and states the outcome ('create an explicit checkpoint'). This clearly distinguishes it from sibling run-management tools like create_run and resume_run.
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 guidance on when to use this tool versus alternatives. The phrase 'small state patch' implies a use case, but no conditions, exclusions, or sibling comparisons are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_runA
Create a new orchestrator run from a high-level goal and optional JSON spec.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | ||
| spec_json | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey that this is mutating, non-destructive, and non-idempotent. The description adds no additional behavioral context such as side effects, state changes, required permissions, or failure behavior; it just restates the action and inputs.
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 states the action, resource, and both parameters with zero filler. Every word earns its place.
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 two-parameter creation tool with an output schema, the basics are covered. Still, the description is thin on behavioral caveats and sibling routing, making it adequate but not fully self-sufficient in the context of the orchestration-tool family.
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 0% schema description coverage, the description must carry parameter meaning, and it partially does: 'goal' is a high-level goal and 'spec_json' is an optional JSON spec. However, it gives no detail about the spec_json format, accepted fields, or constraints beyond being a JSON string.
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 action ('Create'), a specific resource ('orchestrator run'), and the input shape ('from a high-level goal and optional JSON spec'). It also distinguishes itself from lifecycle siblings like resume_run and checkpoint_run by emphasizing a new run.
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 phrase 'new orchestrator run' implies this is for starting fresh rather than resuming, but the description never explicitly says when to choose this over resume_run, checkpoint_run, or plan_goal. The usage context is clear but 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.
get_file_contextBRead-onlyIdempotent
Read file context from the orchestrator workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| paths | Yes | ||
| include_neighbors | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the workspace scope but does not explain what 'file context' includes, how paths resolve, or whether neighboring context is pulled. With annotations carrying the burden, this is an average level of additional transparency.
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 sentence with no filler. The action and scope are front-loaded, and every word contributes meaning. It is appropriately concise for a tool whose safety profile and output schema are already structured.
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?
Annotations and the output schema cover safety and return-shape expectations. However, with zero parameter descriptions and a non-obvious include_neighbors parameter, the description leaves a meaningful invocation gap. An agent cannot fully determine how to request the right amount of context or what 'file context' consists of.
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%, and the description does not compensate by explaining either parameter. 'paths' is somewhat inferable from 'file context', but include_neighbors is entirely unexplained. An agent cannot tell what the integer means, what default 40 implies, or how it changes the returned context.
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 states a read action ('Read file context') and a resource scope ('orchestrator workspace'). It is distinguishable from writing tools like write_project_memory and record_decision, though 'file context' is somewhat ambiguous and could overlap with search_project_memory or list_related_artifacts without further detail.
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 is given about when to use this tool versus alternatives. Sibling tools such as search_project_memory or list_related_artifacts exist, but the description does not contrast them or state any exclusion criteria. Usage context must be inferred entirely from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_goalBRead-onlyIdempotent
Generate a large-app execution blueprint from a high-level goal and optional JSON spec.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | ||
| spec_json | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds that this produces a blueprint from a goal and optional spec, but does not disclose additional behavioral traits such as whether it persists anything or how output is delivered. No contradiction with 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?
A single, front-loaded sentence with the core action stated first and no wasted words. It is highly scannable and immediately useful.
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 output schema and annotations cover return values and side-effect safety, while the description covers purpose and inputs. However, it lacks guidance on how planning relates to the sibling run-lifecycle tools and leaves spec_json semantics underspecified.
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 paraphrases the parameters as 'high-level goal' and 'optional JSON spec', but does not explain the expected format of spec_json, its constraints, or how it influences the blueprint. This adds little beyond the parameter names themselves.
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 ('Generate'), a specific resource ('large-app execution blueprint'), and the inputs ('high-level goal and optional JSON spec'). It is clearly distinguishable from siblings like create_run or resume_run, which concern run execution rather than planning.
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 an early planning use case but gives no explicit guidance on when to use this tool versus siblings such as checkpoint_run or create_run. It does not state ordering, prerequisites, or when planning is not appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_decisionCIdempotent
Record a high-value architectural or implementation decision.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| run_id | Yes | ||
| node_id | Yes | ||
| rationale | Yes | ||
| confidence | No | high | |
| artifact_uri | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral detail beyond the annotations: it does not say whether entries are append-only, whether duplicate calls overwrite, what permissions are needed, or how the decision is stored. It is consistent with the annotations, so not a contradiction, but it contributes nothing beyond them.
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 focused sentence with no filler. Key qualifiers ('high-value architectural or implementation') are front-loaded and help scope the 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?
For a six-parameter tool with no schema descriptions and sibling tools that overlap in purpose, this is too thin. It does not explain parameters, selection criteria, or how it differs from related tools; the existing output schema only removes the need to document return values.
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%, and the description does not explain any of the six parameters. While parameter names are somewhat self-explanatory, required fields like run_id and node_id are not given meaning, and the description does not compensate for the missing schema descriptions.
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 identifies a specific action ('record') and resource ('decision'), and qualifies the kind as 'high-value architectural or implementation.' It does not explicitly compare with record_failure_mode or write_project_memory, so it falls short of full differentiation.
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 is given about when to use this tool versus siblings such as write_project_memory or record_failure_mode. The phrase 'high-value' implies a selection criterion, but there are no explicit when-to-use or when-not-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_failure_modeAIdempotent
Record a reusable failure pattern or bug signature.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| node_id | Yes | ||
| summary | Yes | ||
| signature | Yes | ||
| artifact_uri | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose idempotency and non-destructiveness, and the description aligns with readOnlyHint=false by indicating a write operation. The description adds little beyond 'reusable' to characterize behavior, but given the annotation coverage this is adequate.
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 concise sentence with no filler, front-loading the core purpose immediately. Every word contributes to understanding the tool's function.
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?
Despite annotations covering idempotency and an output schema being present, the description leaves important invocation details unclear, especially what constitutes a 'signature', what run_id and node_id refer to, and when this is preferred over sibling recording tools. This is insufficient for a 5-parameter tool with zero schema descriptions.
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%, and the description provides no meaning for run_id, node_id, signature, summary, or artifact_uri. With low schema coverage the description needed to compensate, but it does not explain what any parameter represents.
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 ('Record') and a clear resource ('reusable failure pattern or bug signature'). It distinguishes this tool from siblings like record_decision or write_project_memory by naming the failure-mode domain explicitly.
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 clear usage context: use this tool when you need to persist a failure pattern or bug signature for reuse. It does not explicitly mention alternatives like record_decision or write_project_memory, so it lacks the when-not/exclusion guidance needed for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_runAIdempotent
Resume an orchestrator run until completion, pause, or failure.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, destructive, and idempotent traits, so the description does not need to restate those. It adds useful behavioral context beyond the schema: the run continues until completion, pause, or failure, which helps an agent understand the tool's execution behavior. No contradiction with 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?
A single, front-loaded sentence conveys the purpose and execution boundaries with no filler. Every word contributes meaning, and the most important constraint—what causes the run to stop—is included without extra prose.
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 one-parameter tool with an output schema and annotations, the description covers the essential behavioral contract well. The only notable gap is the absence of explicit guidance about which run states are valid for resumption, but this is minor given the clarity of 'Resume an orchestrator run.'
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%, and the description does not directly explain run_id beyond naming the 'orchestrator run' entity. The parameter name and schema title are largely self-explanatory, so the agent can probably infer which ID to supply, but the description adds no detail about where the ID comes from or its format.
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 ('Resume') and identifies the target resource ('an orchestrator run'), then narrows the contract by stating the possible terminal states: completion, pause, or failure. This clearly distinguishes it from sibling tools like create_run or checkpoint_run.
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 word 'Resume' implies this tool is for already-created or previously paused runs, and the terminal-state clause clarifies what happens after invocation. However, it never explicitly states when to prefer this tool over alternatives such as checkpoint_run or create_run, leaving usage context to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_project_memoryARead-onlyIdempotent
Search project memory by query string and optional type filters.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| limit | No | ||
| query | Yes | ||
| status | No | active |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, and non-destructive behavior, so the description does not need to repeat those. It adds that searching is by query and type filters, but does not disclose default behavior like status='active' or limit semantics. No contradiction with 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?
A single, front-loaded sentence with no filler. It states the action, target, and primary input 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?
The presence of an output schema and rich annotations reduce the need to explain return values and safety. However, with 0% schema description coverage, the minimal description leaves the exact filter semantics and default behavior under-specified. It is adequate for basic invocation but has clear 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?
Schema description coverage is 0%, so the description must compensate. It names 'query' and vaguely mentions 'optional type filters', but does not enumerate or clarify the kind, status, or limit parameters, nor their defaults. This leaves most parameter meaning to inference.
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 and resource: 'Search project memory', with a concrete mechanism ('by query string and optional type filters'). It clearly distinguishes itself from siblings like write_project_memory and record_decision, which are write-oriented.
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 verb 'Search' implies this is the retrieval tool compared to write_project_memory, but the description gives no explicit when-to-use guidance, prerequisites, or exclusions. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_project_memoryCIdempotent
Write a durable memory entry with provenance to the backing store.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| kind | Yes | ||
| run_id | Yes | ||
| status | No | active | |
| node_id | Yes | ||
| confidence | No | medium | |
| supersedes | No | ||
| value_json | Yes | ||
| artifact_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the description does not need to restate those. It adds some context by emphasizing durability and provenance, but it does not explain important behaviors such as overwrite/supersede semantics or what happens when the same key is written again.
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, front-loaded sentence with no filler. It is easy to scan, though the brevity sacrifices necessary detail.
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?
This tool has 9 parameters, 5 required, no schema descriptions, and no parameter guidance in the description. An agent cannot confidently determine allowed kind values, the expected format of value_json, or the semantics of supersedes, so the description is not complete enough for reliable invocation.
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 by explaining parameters, but it only hints at provenance for run/node fields. The meanings of kind, key, value_json, status, confidence, supersedes, and artifact_id are left entirely to the agent to infer from names alone.
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 ('Write') and identifies the resource ('durable memory entry with provenance' written to 'the backing store'), so an agent can tell this is a persistence operation. However, it does not distinguish itself from sibling tools like record_decision or record_failure_mode, which may also write memory entries.
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 about when to use this tool versus alternatives such as record_decision, record_failure_mode, or search_project_memory. There are no stated use cases, prerequisites, or exclusions, leaving the choice of tool 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.
10 tool updates
v0.1.0- First observed
checkpoint_run - First observed
create_run - First observed
get_file_context - First observed
list_related_artifacts - First observed
plan_goal - First observed
record_decision - First observed
record_failure_mode - First observed
resume_run - First observed
search_project_memory - First observed
write_project_memory
TDQS
Scored across 10 tools
Most tools target distinct actions or resources, but plan_goal and create_run both take a high-level goal and optional JSON spec, making their boundaries unclear. Similarly, search_project_memory and list_related_artifacts both retrieve stored information in overlapping ways. Descriptions help clarify intent, but some pairs could still lead to misselection.
All tools follow a consistent verb_noun snake_case pattern, such as resume_run, write_project_memory, record_decision, and create_run. The naming is uniform and predictable across the entire toolset.
Ten tools is a well-scoped count for an orchestrator and memory management server. Each tool covers a meaningful operation without the set feeling bloated or overly sparse.
The core lifecycle is covered: creating and resuming runs, checkpointing, planning, memory read/write, and recording decisions/failures. Minor gaps exist, such as no explicit run status/query tool or delete operation for memory entries, but agents can generally work within the provided surface.
Maintenance
Related MCP Connectors
Control plane for autonomous software labor. Agents claim objectives over MCP with audit trail.
- memnodeOAuthdev.memnode
Persistent, inspectable memory for AI agents with lineage, correction, and a hosted MCP endpoint.
The AI orchestration agent for modern software teams.
Private-by-default, local-first memory/context/task orchestrator for MCP apps and agents.
Related MCP Servers
- AlicenseDqualityDmaintenanceAI-native orchestration layer with 80+ tools for task management, code editing, browser automation, terminal control, and persistent memory across CLI, local MCP, and cloud deployments.694 npm31ISC
- FlicenseNot gradedqualityDmaintenanceShared memory and orchestration for coding agents, enabling persistent knowledge, multi-agent coordination, and a canonical workflow across MCP-compatible AI clients.74 npm111-

ellmos-homebase-mcpofficial
AlicenseNot gradedqualityCmaintenanceEnables local-first LLM orchestration with persistent memory, knowledge management, routing, swarm patterns, API probing, tests, automation planning, and plugin discovery via a stdio MCP server, using SQLite for offline storage.255 npm1MIT- AlicenseNot gradedqualityCmaintenanceA production-grade multi-agent workflow orchestrator built on the Model Context Protocol, featuring planner/executor/critic agents, durable run state, and replayable traces.15MIT