Skip to main content
Glama
sevenboom77

ResearchTwin MCP Server

by sevenboom77

ResearchTwin MCP Server

ResearchTwin MCP Server is the persistent action layer for ResearchTwin, a long-horizon research-project agent. It gives an OpenTrek-hosted agent real MCP tools for recording research work, retaining project state and advisor requirements, and producing evidence-based progress reports.

The repository is designed as a competition-quality reference implementation: RAG answers questions from research material, while MCP performs explicit, auditable changes to the project record.

All committed examples are fictional and anonymized. Operational data belongs in runtime_data/ and is intentionally excluded from Git.

Overview

A research assistant should do more than answer a single question. ResearchTwin keeps a durable record of what happened in an evolving project:

  • concrete activities, outcomes, blockers, and next steps;

  • the current project stage, tasks, risks, and decisions;

  • structured advisor requirements;

  • external candidate intelligence with a reviewable lifecycle;

  • weekly, meeting, or stage reports assembled from persisted evidence.

The server is intended to be called by the ResearchTwin Agent in OpenTrek. It does not replace the agent, an LLM, or the existing ResearchTwin_Docs knowledge base.

Related MCP server: Argon Memory

Why MCP

RAG and MCP have distinct responsibilities:

Capability

Responsibility

ResearchTwin_Docs RAG

Retrieve and explain already available papers, notes, and technical materials.

ResearchTwin MCP Server

Persist and retrieve research-management state through explicit tool calls.

ResearchTwin Agent

Decide when to retrieve, record, query, and summarize; turn natural language into structured tool arguments.

This separation keeps the project record deterministic and reviewable. The MCP server does not need to run another LLM merely to store a structured activity or create a report from stored facts.

Candidate Intelligence != Project Knowledge

Candidate intelligence is a separate ledger for externally discovered papers, repositories, news, web material, advisor leads, and similar items. A candidate can move from discovered through review to promoted, but promoted records user approval and supporting evidence only. It does not write to BaiLian, ResearchTwin_Docs, or any other knowledge base, and it does not by itself turn an external item into a verified project fact.

Architecture

flowchart LR
    U[Researcher] --> A[OpenTrek ResearchTwin Agent]
    A -->|retrieve and reason| R[ResearchTwin_Docs RAG]
    R --> K[Research papers and technical material]
    A -->|MCP function calls| M[ResearchTwin MCP Server]
    M --> T[Nine research-management tools]
    T --> S[JSON persistence layer]
    S --> D[Runtime project records, candidate ledger, and reports]

See docs/architecture.md for component boundaries, persistence rules, and extension points.

Features

  • Official Python MCP SDK integration.

  • Streamable HTTP as the primary MCP transport at /mcp.

  • Dedicated Remote MCP entry point for pre-installed, long-lived Streamable HTTP deployment.

  • Optional command-line SSE compatibility transport, when selected at startup.

  • Dedicated stdio console entry point for uvx-hosted MCP clients.

  • Nine focused tools instead of a monolithic server script.

  • UTF-8 JSON persistence with atomic replacement and in-process locking.

  • UUID record identifiers and timezone-aware ISO 8601 timestamps.

  • Structured success and error responses suitable for agent tool handling.

  • Windows PowerShell startup, test, smoke-test, and OpenTrek integration guidance.

MCP Tools

Tool

Use it when the agent needs to…

record_research_activity

Persist completed work, experimental results, blockers, reading, or next steps.

list_research_activities

Recall work history using date, type, or tag filters.

update_project_status

Merge or replace the current stage, task lists, risks, and decisions.

get_project_status

Read the current project snapshot before planning or reporting.

record_advisor_instruction

Preserve a structured advisor requirement, priority, deadline, and follow-up.

record_candidate_intelligence

Persist a newly discovered external candidate without treating it as project knowledge.

list_candidate_intelligence

Review recent candidates by lifecycle status, source type, or related issue.

update_candidate_status

Advance a candidate through the strict review lifecycle and retain approval evidence.

generate_research_report

Build a weekly, meeting, or stage Markdown report from persisted data.

The complete input, output, and error contract is in docs/mcp_tools.md.

Project Structure

ResearchTwin-MCP-Server/
├── server.py                         # Repository-root launch entry point
├── Dockerfile                        # Streamable HTTP container image
├── src/researchtwin_mcp/
│   ├── config.py                     # RESEARCHTWIN_* settings validation
│   ├── server.py                     # MCP server and transport startup
│   ├── remote_entry.py                # Dedicated persistent Streamable HTTP entry
│   ├── stdio_entry.py                # Dedicated uvx/stdin-stdout MCP entry
│   ├── models/                       # Validation helpers and schemas
│   ├── storage/                      # Shared JSON persistence layer
│   └── tools/                        # Activity, status, advisor, candidate, and report tools
├── scripts/
│   ├── start_server.ps1
│   ├── show_connection_info.py       # Read-only local/LAN URL helper
│   ├── smoke_test.py
│   ├── deployment_check.py           # Read-only deployment preflight/probe
│   ├── build_fc_web_zip.py            # Debian 11 x86_64 CPython 3.12 FC ZIP builder
│   ├── stdio_smoke_test.py            # Official Client stdio protocol smoke
│   └── wheel_stdio_smoke_test.py      # Non-editable wheel stdio validation
├── deploy/                           # systemd and Nginx deployment examples
├── tests/
├── docs/
├── examples/sample_data/             # Fictional, commit-safe demo data
└── runtime_data/                     # Local operational data; ignored by Git

Requirements

  • Windows PowerShell for local development, or Linux for deployment

  • Python 3.11 or newer; Python 3.11.x is the recommended competition environment

  • Network access only when OpenTrek runs from another device on the LAN

Installation

From a new Windows PowerShell session:

Set-Location C:\work\ResearchTwin-MCP-Server
python --version
where.exe python

python -m venv .venv
.\.venv\Scripts\Activate.ps1

python --version
where.exe python
python -m pip install --upgrade pip setuptools wheel
python -m pip install -e ".[dev]"

The first result from where.exe python should be the virtual environment interpreter after activation. If PowerShell blocks activation for the current session, use its documented process-scoped execution-policy procedure, then activate the environment again; do not weaken system-wide policy unnecessarily.

Configuration

The server reads these environment variables from the process environment:

Variable

Default

Meaning

RESEARCHTWIN_HOST

0.0.0.0

Bind address. The code default permits trusted LAN clients to reach the service; use 127.0.0.1 behind a Linux reverse proxy.

RESEARCHTWIN_PORT

8000

TCP port used by the selected transport.

RESEARCHTWIN_DATA_DIR

runtime_data

Local persistence directory, resolved relative to the repository root when relative.

RESEARCHTWIN_LOG_LEVEL

INFO

Python log level.

Copy .env.example to .env if you want local configuration that survives a new PowerShell session. .env is ignored by Git and is loaded from the repository root when the server starts. Existing process or system environment variables always take precedence over values in .env.

if (-not (Test-Path .env)) { Copy-Item .env.example .env }

For a one-off override, set values in the PowerShell session instead:

$env:RESEARCHTWIN_HOST = "0.0.0.0"
$env:RESEARCHTWIN_PORT = "8000"
$env:RESEARCHTWIN_DATA_DIR = "runtime_data"
$env:RESEARCHTWIN_LOG_LEVEL = "INFO"

Do not put keys, personal identifiers, or a user-specific IP address in source code or committed configuration. Treat .env as local operational configuration, not a secret-management system.

For a Docker container, use RESEARCHTWIN_HOST=0.0.0.0 inside the container and publish the container port only to host loopback when Nginx is the public entry point. The supplied Dockerfile already has safe container defaults for that pattern.

For a BaiLian-hosted stdio/uvx trial, set RESEARCHTWIN_DATA_DIR explicitly. The FC example path /tmp/researchtwin-data is EPHEMERAL / DEMO ONLY: it may be lost on instance recycling and is not long-term ResearchTwin Memory. See PyPI and BaiLian uvx preparation.

Run

With the virtual environment active:

python server.py

For a deployment process that explicitly selects only the persistent Remote Streamable HTTP transport, use:

.\.venv\Scripts\python.exe -m researchtwin_mcp.remote_entry

The default primary endpoint is:

http://<LAN_IPV4>:8000/mcp

For the local machine only, substitute 127.0.0.1 for . For OpenTrek on another trusted LAN device, use the Windows host's applicable IPv4 address. The helper script is also available:

.\.venv\Scripts\python.exe .\scripts\show_connection_info.py
.\scripts\start_server.ps1

show_connection_info.py only reads local configuration and network information. When it cannot unambiguously identify a LAN IPv4 address, it prints UNKNOWN; use ipconfig to choose the active Ethernet or Wi-Fi IPv4 address rather than guessing.

Streamable HTTP is the normal mode. For explicit SSE compatibility, run python server.py --transport sse and register the resulting /sse endpoint as documented in OpenTrek integration guidance. SSE is a separately selected transport mode, not an alternative URL to register alongside /mcp.

Hosted stdio mode for BaiLian uvx

The source-tree researchtwin-mcp-server console command runs the same nine tools over MCP stdin/stdout. It does not start HTTP, Uvicorn, or a listener on port 8000. Published PyPI release 0.1.0 predates the candidate-intelligence tools and remains the compatible stdio baseline. The Remote entry added in this source tree is not part of that immutable PyPI release; a future release needs a new version and separate publication. Do not replace the existing BaiLian uvx service with this local source until the parallel Remote deployment has completed its own public protocol verification.

Demo network safety

  • Use 127.0.0.1 for local-only testing.

  • The default 0.0.0.0 bind is only for a trusted LAN or campus-network demonstration.

  • Do not expose this unauthenticated development server through public port forwarding.

  • Before any public or broader deployment, add HTTPS, authentication, authorization, a reverse proxy, and appropriate network controls.

Test

Run unit tests from the repository root:

pytest -v

Run the local MCP Streamable HTTP smoke test after dependencies are installed:

.\.venv\Scripts\python.exe .\scripts\smoke_test.py

The smoke test starts an isolated Streamable HTTP server and uses the official MCP client to discover exactly nine tools, exercise the core persistence and report workflow, and check representative isError failures. It uses temporary data rather than your runtime_data/ directory.

Run the dedicated stdio smoke test after installing the project:

.\.venv\Scripts\python.exe .\scripts\stdio_smoke_test.py

It launches the dedicated console entry point through the official MCP stdio client, verifies initialization and exactly nine tools, records and reads back temporary data, and checks an MCP isError response. It does not listen on port 8000.

Run the five-session Remote MCP stability check to verify the dedicated pre-installed Python process. It uses its own temporary data directory and prints cold/warm protocol latency measurements:

.\.venv\Scripts\python.exe .\scripts\remote_stability_test.py --rounds 5

OpenTrek Integration

OpenTrek registration should use the UI's STREAMABLE choice and this URL shape:

http://<LAN_IPV4>:8000/mcp

Do not hand-invent a transportType JSON value. Select STREAMABLE on the OpenTrek MCP registration page, enter the URL, save, and verify that all nine tools are discovered. See the step-by-step registration guide and OpenTrek integration guidance for LAN IPv4 discovery, SSE compatibility, VPN checks, and a safe firewall troubleshooting process.

Linux and remote deployment

The repository includes a non-root Docker image, a systemd service example, an Nginx reverse-proxy example, and a read-only deployment preflight script. They package the existing Streamable HTTP server without changing its nine MCP tools. Follow the Linux deployment guide before using them.

The current service has no application-level authentication or authorization. Never leave http://<PUBLIC_IP>:8000/mcp publicly exposed. A public deployment needs HTTPS, a reverse proxy, restrictive network access, and an approved authentication plan in addition to the provided packaging.

Demo Scenario

An end-to-end demonstration can show the difference between knowledge retrieval and persistent action:

  1. The agent uses RAG to explain a fictional RNN-PPO paper or methods note.

  2. The researcher says that an RNN-PPO experiment was completed but training is still unstable.

  3. The agent calls record_research_activity with the outcome, problem, and next step.

  4. A fictional advisor requirement to focus on generalization is recorded with record_advisor_instruction.

  5. The agent checks project status, then calls generate_research_report for a group meeting.

The resulting Markdown report is grounded in persisted records, not a one-turn answer. A narrated runbook is in docs/demo_flow.md.

Privacy and Git Safety

The repository's .gitignore excludes .venv/, pycache/, Python bytecode, .env, pytest and Ruff caches, runtime_data/, and log files. These paths may contain local research activity, advisor context, reports, credentials, or machine-specific data.

Only the fictional, anonymous fixtures in examples/sample_data/ are safe to commit. Before any commit or push, inspect:

git status
git diff --check

Never commit real advisor messages, real paper content, chat transcripts, keys, VPN details, or personally identifying information.

Roadmap

  • Move from JSON files to a durable multi-user storage backend when needed.

  • Add ResearchTwin Memory and ResearchTwin_Core integration points.

  • Add paper-intelligence and citation workflows around the existing RAG layer.

  • Add a protected dashboard for reviewing project history and reports.

  • Improve the competition demo story without exposing real research data.

Documentation

Promoted Candidate does not automatically enter Project Knowledge. Only prepare_project_knowledge followed by explicit confirmation in sync_project_knowledge_to_bailian can perform a Bailian write.

The sync adapter uses the official Bailian SDK and reads ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET, RESEARCHTWIN_BAILIAN_WORKSPACE_ID, and RESEARCHTWIN_BAILIAN_INDEX_ID from the environment. Credentials and presigned URLs are never persisted.

Available Tools

16 tools
generate_research_reportGenerate research reportA

Generate a weekly, meeting, or stage research report from persisted research activities, advisor instructions, and project status. The Markdown report is returned and safely saved under the configured local data directory. report_type must be one of: meeting, stage, weekly.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYes
start_dateYes
report_typeYes
project_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
reportYes
statusYes
report_pathYes
report_typeYes
generated_atYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the output is Markdown, that the report is returned and safely saved under the local data directory, and that report_type must be one of the listed values. This gives a useful behavioral picture, though it does not address empty-data handling or potential overwrite behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. It front-loads the primary action and then provides essential output and constraint details compactly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers report types, data sources, output format, and the storage side effect, and an output schema exists. However, it leaves the meaning of start_date/end_date and the optional project_name filter unexplained, and it does not mention any prerequisites or limitations for generating a report.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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 adds little beyond the schema: report_type values are already an enum, and start_date/end_date meaning is only vaguely implied as a reporting period. The optional project_name parameter is not mentioned at all, leaving most parameters semantically under-specified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Generate a weekly, meeting, or stage research report') and names the data sources that feed the report. It is clearly distinct from sibling tools that record, list, or update activities and statuses.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when a consolidated report is needed from persisted research activities, advisor instructions, and project status. However, it does not explicitly contrast with alternatives like list_research_activities, nor does it state when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_statusGet current research project statusA

Retrieve the complete persisted project status when the user asks what stage the project is in, which risks remain, or what should happen next.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
project_statusYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral disclosure burden. 'Retrieve' and 'persisted' signal a read operation and a stored data source, but the description does not explicitly state that it has no side effects or how it relates to update_project_status. It is minimally transparent but not misleading.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the action and resource, then gives concrete usage triggers. There is no filler or redundant restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read tool with an output schema, the description covers what is retrieved, where it comes from, and when to call it. The only small gap is the absence of an explicit no-side-effects or sibling-routing note, but the output schema handles return semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and schema description coverage is 100%, so the schema fully captures parameter meaning. The baseline for a zero-parameter tool is 4, and the description does not need to add parameter-level detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Retrieve the complete persisted project status') and lists concrete user intents (stage, risks, next steps). It is clear, but it does not explicitly differentiate itself from sibling tools like get_research_context or update_project_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit trigger conditions: use it when the user asks what stage the project is in, which risks remain, or what should happen next. It does not name alternatives or say when not to use it, so it lacks full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_research_contextGet research contextB

Read-only aggregate of current project status, recent activities, advisor instructions, and candidate intelligence.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_nameNo
candidate_limitNo
include_rejectedNo
recent_brief_limitNo
recent_advisor_limitNo
recent_activity_limitNo
recent_project_knowledge_limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
research_contextYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly discloses that the operation is 'Read-only', which is valuable behavior information given that no annotations are provided. However, it does not disclose other behavioral traits such as how the limit parameters affect the result, what happens when project_name is null, or whether the aggregate is a single combined structure or separate sections.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence with no fluff, and it front-loads the key 'Read-only aggregate' behavior. It is appropriately concise, though it could be slightly more structured by adding a second sentence with usage guidance or parameter hints.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 7 parameters, no annotations, and 0% schema description coverage, the one-sentence description is insufficient for an agent to confidently select and invoke the tool. It does not explain default behavior, the meaning of null project_name, or how the limit parameters shape the output. The presence of an output schema mitigates return-value confusion but not invocation decisions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, so the description must compensate. It names a few high-level categories (project status, activities, advisor instructions, candidate intelligence) that map to some parameters, but it does not explain specific parameters like candidate_limit, include_rejected, recent_brief_limit, or recent_project_knowledge_limit. An agent could infer meaning from parameter names, but the description adds little beyond that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Read-only aggregate of current project status, recent activities, advisor instructions, and candidate intelligence.' It clearly identifies what the tool returns and distinguishes it from sibling tools that address only one of these categories. However, 'aggregate' is somewhat generic and doesn't explicitly describe the output structure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when a broad snapshot of research context is needed, but it does not explicitly state when to use this tool versus siblings like get_project_status or list_research_activities. No exclusions or alternative tool names are mentioned, leaving the agent to infer the decision from the aggregate wording.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_candidate_intelligenceList candidate intelligenceA

List recent candidate intelligence without presenting it as verified or adopted project knowledge. Filter by lifecycle status, source type, or a related project-issue substring when useful.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
statusNo
source_typeNo
related_project_issueNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
statusYes
candidatesYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the burden. It reveals that results should be treated as unverified candidate items rather than adopted knowledge, and 'List' implies a read operation. It does not explicitly state read-only behavior, define 'recent', or describe ordering and pagination, leaving some behavioral ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the verb and resource, then supplies filter guidance. There is no redundancy or filler; every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema covers the return shape, so the description does not need to explain return values. The definition communicates the tool's purpose, the unverified nature of candidate intelligence, and the available filtering dimensions. Minor gaps remain around the definition of 'recent' and lack of explicit sibling-tool routing, but the description is adequate for a straightforward list operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 does so for the meaningful filters: 'lifecycle status' maps to status, 'source type' maps to source_type, and 'related project-issue substring' clarifies that the string is matched as a substring. Limit is not mentioned, but the schema's default and range make it self-explanatory.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'List recent candidate intelligence'. It also distinguishes itself from verified or adopted project knowledge, which separates it clearly from sibling tools like list_project_knowledge and list_research_activities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context that this tool is for unverified candidate intelligence, not adopted project knowledge. It also advises filtering by lifecycle status, source type, or related project-issue substring when useful. However, it does not explicitly name alternative tools or state when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_project_knowledgeList project knowledgeC

List local project knowledge records and synchronization status.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
sync_statusNo
project_nameNo
knowledge_typeNo
include_contentNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
statusYes
knowledgeYes

TDQS

C2.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does convey that this is a read-only listing of local records plus synchronization status, which is a meaningful behavior beyond the name. However, it does not disclose effects of filters, pagination behavior, or what happens when include_content is true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler, and every word contributes to the stated purpose. It is concise, though it achieves this by omitting parameter and usage detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with five optional filter parameters, no annotations, and zero schema description coverage, a one-line purpose statement is incomplete. The output schema covers return structure, but the description gives no information about filtering, defaults, or when the tool should be chosen.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description names none of the five parameters. It adds no meaning over the input schema, so it fails to compensate for the lack of parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and a distinct resource ('local project knowledge records and synchronization status'). It clearly identifies the tool as a read-only listing over project knowledge, which separates it from sibling tools like prepare_project_knowledge and sync_project_knowledge_to_bailian, though it does not explicitly name any alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool instead of list_research_activities, prepare_project_knowledge, or sync_project_knowledge_to_bailian. No filters, preconditions, or exclusions are mentioned, so the agent must infer usage entirely from the tool name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_research_activitiesList research activitiesA

Retrieve persisted research history for questions about past work, recent experiments, or unresolved problems. Supports optional date, activity type, and tag filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNo
limitNo
end_dateNo
start_dateNo
activity_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
statusYes
activitiesYes

TDQS

A4/5.0
Behavior3/5

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 behavioral disclosure. 'Retrieve' implies a read operation, and 'Supports optional ... filters' describes basic behavior. However, it does not mention pagination behavior, result ordering, whether data is current or archived, or any limitations on returned items. These gaps are noticeable for a list 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no redundant phrasing. The first sentence states the core purpose and the second lists the optional filters. Information is front-loaded and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema exists, so return values are documented elsewhere, and the input schema provides detailed constraints for each parameter. The description covers the tool's selection context and filter capabilities, which is sufficient for basic invocation. It lacks explicit sibling differentiation and behavioral notes like sorting or pagination, but given the schema richness, the definition is complete enough for an agent to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 does summarize the filter dimensions as 'date, activity type, and tag filters', which adds meaning beyond the raw parameter names for start_date, end_date, activity_type, and tag. However, it omits the 'limit' parameter entirely and does not clarify that start_date and end_date form a range. The compensation is partial, not complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Retrieve') and resource ('persisted research history'), clearly identifying the tool's purpose. It also adds the context of 'past work, recent experiments, or unresolved problems', which distinguishes it from sibling list tools targeting candidate intelligence or knowledge briefs. The resource is unique enough that an agent can select it correctly without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'for questions about past work, recent experiments, or unresolved problems' provides clear situational context for when this tool is appropriate. It does not explicitly name exclusions or alternative tools, so it falls short of a 5, but it clearly signals the intended use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_research_intelligence_briefsList research intelligence briefsA

List persisted intelligence brief artifacts newest first.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
end_dateNo
brief_typeNo
start_dateNo
project_nameNo
trigger_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
briefsYes
statusYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral disclosure burden. It reveals that the tool lists persisted artifacts and orders them newest first, which strongly implies a non-mutating read, but it does not explicitly address side effects, pagination, filter combination, or access considerations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, front-loading the action and resource with no filler or redundancy. Every word contributes meaning, though the brevity comes at the cost of contextual detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, zero schema description coverage, and six optional filter parameters, six words are insufficient for an agent to know how to combine filters, what the intended selection criteria are, or when to prefer this tool over siblings. The output schema covers return shape, but usage and parameter context are missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 6 parameters with 0% schema description coverage, and the description does not compensate by explaining any parameter semantics. Filtering behavior for start_date, end_date, brief_type, project_name, trigger_type, and limit is left entirely to inference from parameter names and hard-coded schema constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and resource ('persisted intelligence brief artifacts'), and adds ordering ('newest first'). This clearly distinguishes it from sibling tools like list_research_activities and list_candidate_intelligence, which target different artifact types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a read/list use case by saying 'List persisted intelligence brief artifacts', but it gives no explicit when-to-use guidance, exclusions, or alternatives such as record_research_intelligence_brief. An agent must infer usage from the name and the verb rather than receiving direct routing help.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prepare_project_knowledgePrepare project knowledgeA

Prepare an auditable Markdown knowledge artifact from a promoted candidate; does not contact Bailian.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
user_noteNo
candidate_idYes
project_nameYes
knowledge_typeYes
knowledge_contentYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
knowledgeYes

TDQS

A3.7/5.0
Behavior3/5

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 output format, auditability, and a key negative side-effect (no Bailian contact). It does not clarify whether the artifact is persisted, whether promotion is required, or any permission or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single compact sentence with no filler words. The primary action and output are front-loaded, and the critical no-Bailian caveat is clearly appended.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given six parameters, no annotations, and a likely precondition around what 'promoted candidate' means, the description is too sparse for confident invocation. The output schema covers return values, but parameter semantics and the promotion prerequisite remain gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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, but it only hints at candidate_id via 'promoted candidate' and knowledge_content via 'Markdown'. It leaves knowledge_type, user_note, project_name, and title semantics unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action ('Prepare'), a concrete output ('auditable Markdown knowledge artifact'), and a source ('promoted candidate'). It also distinguishes itself from the Bailian-sync sibling by explicitly stating it does not contact Bailian.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The clause 'does not contact Bailian' provides an explicit exclusion and clearly separates this tool from sync_project_knowledge_to_bailian. It does not, however, describe positive conditions for when to use this tool over other knowledge-related siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

record_advisor_instructionRecord advisor instructionA

Persist a structured advisor requirement after the ResearchTwin Agent has interpreted an advisor message. Use it for a task, priority, deadline, constraints, or follow-up that must appear in later reports. priority must be one of: critical, high, low, medium.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskYes
deadlineNo
priorityYes
follow_upNo
constraintsNo
instructionYes
source_noteNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
recordYes
statusYes
instruction_idYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full behavioral disclosure burden. 'Persist' implies a write operation, and 'must appear in later reports' hints at effect, but there is no mention of side effects, idempotency, permissions, overwrite behavior, or what happens after persistence.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the core action and resource. The later sentence about priority is mostly redundant with the schema enum, but it is brief and does not significantly hurt clarity. Overall it is efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 7 parameters, no annotations, and no schema descriptions, the description leaves important gaps: it does not explain 'instruction' or 'source_note', does not describe persistence semantics, and does not differentiate from sibling record_* tools. An output schema exists, but input behavior and selection context are still incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 mentions task, priority, deadline, constraints, and follow-up as content of an advisor requirement, adding some meaning beyond the schema. However, it does not clarify the key 'instruction' parameter or 'source_note', and the priority enumeration merely duplicates the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Persist') and resource ('structured advisor requirement'), and clearly scopes the content to tasks, priority, deadlines, constraints, and follow-ups that must appear in later reports. It distinguishes this tool from sibling record_* tools by tying it to the ResearchTwin Agent's interpretation of an advisor message.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: after the ResearchTwin Agent has interpreted an advisor message, and for requirements that must appear in later reports. It does not explicitly name alternative tools or state when not to use it, but the context is strong enough to guide selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

record_candidate_intelligenceRecord candidate intelligenceA

Record a newly discovered paper, repository, web item, advisor lead, or other external candidate that may be relevant to the project. This does not validate or adopt it as project knowledge. source_type must be one of: advisor, github, news, other, paper, web.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
statusNodiscovered
summaryYes
user_noteNo
confidenceNo
source_urlNo
source_typeYes
relevance_reasonYes
related_project_issueNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
recordNo
statusYes
createdNo
messageNo
candidate_idYes
record_statusNo
existing_candidate_idNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It usefully states that the tool does not validate or adopt the candidate as project knowledge, but it does not describe side effects, persistence behavior, return shape, or error conditions. This is partial transparency, not full.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The primary action and scope are front-loaded, and the non-validation clarification is placed immediately after, making the core intent easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter intake tool with no parameter descriptions and no annotations, the description is too sparse. It explains the high-level purpose but leaves most parameters and workflow nuances unexplained. The presence of an output schema does not compensate for the missing input semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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, but it only restates the source_type enum and gives general candidate categories. It adds no meaningful guidance for required fields like title, summary, relevance_reason, or for optional fields like confidence, source_url, and status.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('record') with a clear resource: newly discovered external candidates such as papers, repositories, web items, and advisor leads. It also distinguishes recording from validation/adoption, making the tool's scope unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates when to use the tool: for newly discovered candidates that may be relevant, not for validating or adopting knowledge. It does not explicitly name alternative tools like update_candidate_status or record_research_activity, but the intake-oriented framing is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

record_research_activityRecord research activityB

Record a concrete research activity when the user reports completed work, experiments, reading, problems, results, or next steps. This persists research progress for later retrieval and reporting. activity_type must be one of: analysis, coding, data_collection, debugging, experiment, meeting, other, paper_reading, writing.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
tagsNo
titleYes
resultNo
sourceNo
problemNo
next_stepNo
descriptionYes
activity_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
recordYes
statusYes
activity_idYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of disclosing behavior. It does state that the tool 'persists research progress for later retrieval and reporting,' which communicates a write/save side effect. However, it does not describe idempotency, overwriting, date defaults, permissions, or other side-effect nuances, so it is only partially transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and front-loaded with the action and trigger conditions. The activity_type enum listing adds length and duplicates schema information, but the overall structure is clear and easy to scan, so it remains efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description provides enough context to understand the core purpose and invocation trigger, and an output schema exists so return-value documentation is not required. Still, with nine parameters, zero schema description coverage, no annotations, and no differentiation from similar record_* tools, the definition is not fully complete for an agent deciding exactly what to populate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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 for parameter meaning, but it only lists the activity_type enum values that are already present in the schema. It alludes to problems, results, and next steps as recorded content, but it does not explain title, description, date, source, tags, or the semantics of optional fields, leaving significant gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool records a concrete research activity and lists the input scenarios (completed work, experiments, reading, problems, results, next steps). It is distinct from list_research_activities and other record_* siblings in intent, but it does not explicitly contrast itself with those siblings, 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to use this tool 'when the user reports completed work, experiments, reading, problems, results, or next steps,' providing concrete trigger conditions. It does not mention when not to use it or point to alternative tools, so it misses the exclusion aspect required for a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

record_research_intelligence_briefRecord research intelligence briefC

Persist an Agent-generated research intelligence brief; this is a communication artifact, not project knowledge.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
brief_typeYes
period_endYes
period_startYes
project_nameYes
trigger_typeNomanual
candidate_idsNo
brief_markdownYes
search_queriesNo
executive_summaryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
briefYes
statusYes
createdNo
updatedNo
record_statusNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavior itself. 'Persist' signals a write operation, and 'communication artifact, not project knowledge' adds some storage-context clarity. However, it does not disclose whether the write is idempotent, what happens on duplicate periods, prerequisites, authorization needs, or how the artifact relates to later listing/retrieval.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler. Both the core purpose and the important 'not project knowledge' distinction earn their place, making this appropriately concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a 10-parameter, 7-required-field write tool with no annotations and no schema descriptions. A one-sentence description stating only that it persists a communication artifact is far from sufficient to guide an agent on how to construct the brief, set the period, or populate the optional fields. Some context exists, but major gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

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 parameter-level meaning at all. Properties like brief_markdown, candidate_ids, search_queries, and trigger_type remain unexplained, 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action and resource: 'Persist an Agent-generated research intelligence brief.' The added clause 'this is a communication artifact, not project knowledge' helpfully positions the tool against the project-knowledge siblings, though it does not explicitly differentiate it from other record_* tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus alternatives. The phrase 'not project knowledge' implies a boundary against prepare_project_knowledge-style tools, but it does not mention record_research_activity, generate_research_report, or list_research_intelligence_briefs, nor does it provide any positive selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_external_researchSearch external researchA

Search public arXiv and GitHub sources and return raw normalized results; nothing is persisted or promoted.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNorelevance
queryYes
sourcesNo
limit_per_sourceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
sortYes
queryYes
statusYes
resultsYes
sourcesYes
source_errorsYes
limit_per_sourceYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral disclosure burden. It successfully communicates that the tool has no persistence or promotion side effects, which is a key safety-relevant trait. It does not mention rate limits, authentication, or external API variability, but the core side-effect profile is clearly disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The entire description is a single focused sentence with no filler. The main purpose and the key behavioral constraint are front-loaded, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the external, non-persistent nature and the source scope, and the output schema exists to cover return values. However, it lacks explicit parameter semantics and usage routing relative to sibling tools, leaving an agent to infer some details from the schema and defaults. It is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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 by explaining parameter meanings. It does not: it only names arXiv and GitHub in the tool behavior, not how 'sources', 'sort', or 'limit_per_source' behave. The parameter names and defaults are self-explanatory to some degree, but the description adds no parameter-specific value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Search'), identifies the resource ('public arXiv and GitHub sources'), and clarifies the output ('raw normalized results'). It also explicitly states 'nothing is persisted or promoted', which distinguishes it from sibling record/list tools. This is far from a tautology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies the tool is for external exploration with transient results, which signals when to use it over recording or internal reporting tools. However, it does not explicitly name alternatives or state when-not-to-use conditions, so it stops short of a full routing guide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sync_project_knowledge_to_bailianSync project knowledge to BailianB

Synchronize prepared project knowledge after explicit user confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
knowledge_idYes
confirm_writeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
knowledgeYes

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavior disclosure. It indicates a write/sync operation and a confirmation requirement, but it does not disclose what synchronization actually changes, whether it overwrites existing Bailian data, whether it is reversible, or what happens if confirm_write is false. This is a significant gap for a potentially mutating tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler. It front-loads the action, names the resource, and includes the important confirmation condition. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite an output schema, the tool lacks annotation coverage and schema-level parameter descriptions. The description is too thin to support correct invocation: it omits the required confirmation semantics, the target behavior in Bailian, and the relationship to prepare_project_knowledge. It is minimally viable but not contextually complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description should compensate, but it only loosely hints at knowledge_id through 'prepared project knowledge' and at confirm_write through 'explicit user confirmation.' It never clearly defines the semantics of either parameter or states that confirm_write must be true for execution to proceed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'synchronize prepared project knowledge' to Bailian, and the phrase 'prepared' distinguishes it from preparation-oriented siblings like prepare_project_knowledge. It is clear enough for an agent to identify the tool's core function, though it does not explicitly name the sibling it is not.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'after explicit user confirmation' implies a precondition, but the description gives no explicit when-to-use or when-not-to-use guidance and does not mention alternating tools. It leaves the relationship to prepare_project_knowledge and list_project_knowledge to inference rather than stating it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_candidate_statusUpdate candidate intelligence statusA

Advance a candidate through discovered, shortlisted, validated, promoted, or rejected. The lifecycle is strict: discovered -> shortlisted/rejected, shortlisted -> validated/rejected, validated -> promoted/rejected; promoted and rejected are idempotent only. Promotion records user approval and evidence but does not write to a knowledge base.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusYes
user_noteNo
candidate_idYes
promotion_reasonNo
validation_evidenceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
recordYes
statusYes
candidate_idYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full disclosure burden and does meaningful work: it reveals that transitions are strict, that promoted and rejected are idempotent terminal states, and that promotion records approval/evidence without writing to a knowledge base. It does not cover error behavior or reversibility, but the key side effects are exposed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three tight sentences: the action is front-loaded, transitions are compactly diagrammed with arrows, and the idempotency/KB side-effect are the only extra details. No filler or repeated schema information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The state machine is the core complexity of this tool and it is fully specified, from allowed transitions to terminal state idempotency. The existence of an output schema covers return-value documentation. Slight gaps remain around whether same-status updates are allowed for non-terminal states and how user_note behaves, but the description is strong enough for correct calls in most scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 for undocumented parameters. It clarifies the status enum by encoding transition rules and links promotion_reason/validation_evidence to the approval-and-evidence note. However, user_note is never mentioned, and the mapping from 'user approval' to specific parameters is implicit rather than explicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise action: 'Advance a candidate through discovered, shortlisted, validated, promoted, or rejected,' naming both the resource (candidate) and the state-machine operation. It also supplies the full status vocabulary, which distinguishes it from sibling tools like record_candidate_intelligence that target candidate facts rather than lifecycle progress.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states when to use the tool: whenever a candidate must move along the strict lifecycle. It spells out the allowed transitions and terminal states, so an agent knows valid calls are constrained by the current status. It does not explicitly name alternative tools for non-status updates, but the lifecycle rules make the tool's scope clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_project_statusUpdate research project statusB

Persist the current research project stage, completed work, pending work, risks, and important decisions. Use merge mode to preserve and de-duplicate existing history, or replace mode for an intentional full status replacement. merge_mode must be one of: merge, replace.

ParametersJSON Schema
NameRequiredDescriptionDefault
risksNo
merge_modeNomerge
project_nameYes
current_stageYes
pending_tasksNo
completed_tasksNo
important_decisionsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
merge_modeYes
project_statusYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It does reveal important behavior around merge mode (preserving and de-duplicating history) and replace mode (intentional full replacement). However, it does not disclose side effects for unknown projects, whether fields are overwritten individually or as a whole, or any broader impact beyond the status record.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: it states what is persisted, then explains mode behavior. The third sentence about merge_mode values is slightly redundant with the schema enum, but still useful for quick agent parsing without inspecting the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutation tool with no annotations, the description is functional but not complete. It lacks guidance on whether the project must already exist, how to format list-like fields (string vs array), and how replace mode affects unspecified optional fields. The presence of an output schema helps, but the description alone leaves notable call-semantics gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 does connect the main fields (stage, completed work, pending work, risks, decisions) to their conceptual meanings and explicitly states merge_mode values. Yet it does not clarify the string-or-array flexibility, the meaning of null defaults, or the semantics of project_name matching, which the schema alone does not fully explain either.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies a concrete action ('Persist') and the resource ('current research project stage, completed work, pending work, risks, and important decisions'). It is distinguishable from related read tools like get_project_status, though it does not explicitly differentiate itself from update_candidate_status or record_research_activity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives useful guidance on when to use merge mode versus replace mode, including the de-duplication and full-replacement behaviors. However, it does not explain when this tool should be chosen over sibling tools such as record_research_activity or get_project_status, leaving some usage context implied rather than explicit.

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.

  1. 16 tool updatesv0.1.0
    • First observedgenerate_research_report
    • First observedget_project_status
    • First observedget_research_context
    • First observedlist_candidate_intelligence
    • First observedlist_project_knowledge
    • First observedlist_research_activities
    • First observedlist_research_intelligence_briefs
    • First observedprepare_project_knowledge
    • First observedrecord_advisor_instruction
    • First observedrecord_candidate_intelligence
    • First observedrecord_research_activity
    • First observedrecord_research_intelligence_brief
    • First observedsearch_external_research
    • First observedsync_project_knowledge_to_bailian
    • First observedupdate_candidate_status
    • First observedupdate_project_status

TDQS

A3.5/5.0

Scored across 16 tools

Disambiguation4/5

Most tools target distinct entities and actions, and the record_*/list_*/update_* prefixes help separate workflows. There is some potential confusion between record_research_activity and update_project_status, or between candidate intelligence and intelligence briefs, but the descriptions clarify the differences.

Naming Consistency5/5

All tool names use a consistent snake_case verb_noun pattern, such as record_*, list_*, update_*, get_*, and sync_*. The naming is predictable and makes the purpose of each tool immediately understandable.

Tool Count4/5

At 16 tools, the server is slightly above the typical 3-15 well-scoped range, but the tools map to a broad but coherent set of research workflows: tracking, reporting, candidate intelligence, and knowledge sync. Each tool has a defined role, so the count is reasonable.

Completeness4/5

The tool surface covers the main lifecycle stages: recording activities and status, managing advisor instructions, triaging candidates, generating reports, and syncing project knowledge. Minor gaps exist, such as no update/delete for activities or briefs, but these feel like intentional append-only patterns rather than blocking omissions.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to persistently store and semantically search shared knowledge via MCP tools.
    2
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables MCP agents to maintain durable, evidence-aware project knowledge, retrieve precise excerpts on demand, and track decisions, conflicts, and revisions across sessions.
    1
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to maintain a persistent identity and structured memory—including reasoning patterns, episodic history, and knowledge—while exposing procedures for managing that memory over MCP.
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables agents to persistently record experiences, recall related episodes, run VRS convergence, and manage bounded world-state through MCP tools.
    MIT