Skip to main content
Glama
Praket7
by Praket7

freebuff-mcp

An MCP bridge for a locally installed and signed-in Freebuff CLI or Desktop installation. It gives an MCP client bounded access to Freebuff sessions, local CLI history, live CLI output, and safe project-file reads.

Requirements

  • Windows, macOS, or Linux

  • Node.js 20 or newer

  • Freebuff CLI or Desktop installed and signed in

  • Codex CLI or another MCP-compatible client

The bridge uses the Freebuff installation on the same computer. It does not share credentials or expose your chats to other users.

Related MCP server: cloud-to-local

Install from npm

npm install --global freebuff-mcp
freebuff-mcp doctor

The package includes its compiled runtime files. No local build is required for npm users.

Configure Codex for Desktop and CLI discovery

The bridge probes the locally running Freebuff Desktop first, then falls back to the CLI if Desktop is unavailable. Do not set FREEBUFF_MCP_CLI_MODE in this setup:

[mcp_servers.freebuff]
command = 'freebuff-mcp'
args = ['serve']
enabled = true

[mcp_servers.freebuff.env]
FREEBUFF_PROJECT_ROOT = '/Users/YOUR_NAME/Desktop/freebuff-work'
# Optional: use this when the Freebuff CLI is not on PATH.
# FREEBUFF_CLI_PATH = '/Users/YOUR_NAME/.config/manicode/freebuff'

Desktop discovery reads dynamic port/launch metadata when Freebuff exposes a readiness file, then verifies the launch ID through /healthz. If that handshake is unavailable, it stays read-only. Use the explicit CLI configuration below when you need bridge-owned prompt injection.

Configure Codex for CLI-only mode

Add this server to ~/.codex/config.toml (%USERPROFILE%\.codex\config.toml on Windows):

[mcp_servers.freebuff]
command = 'freebuff-mcp'
args = ['serve']
enabled = true

[mcp_servers.freebuff.env]
FREEBUFF_MCP_CLI_MODE = 'pty'
FREEBUFF_PROJECT_ROOT = 'C:\Users\YOUR_NAME\Documents\FreeBuff WORK'
# Set this when two project roots share the same basename.
# FREEBUFF_PROJECT_KEY = 'FreeBuff WORK'

On macOS or Linux, use the same block and set the root to a Unix path such as /Users/YOUR_NAME/Desktop/freebuff-work.

Restart Codex and ask it to call freebuff_status, then list_threads.

Run freebuff-mcp install to print a ready-to-paste Desktop-plus-CLI configuration using the current executable, or freebuff-mcp install --write to append it to %USERPROFILE%\\.codex\\config.toml (or ~/.codex/config.toml). The write mode refuses to overwrite an existing freebuff entry.

CLI mode can start a managed Freebuff session, inject prompts, monitor live output, discover the local conversation ID, resume persisted CLI chats, read visible history, list safe project files, and read individual project files. Reasoning changes are supported through Freebuff slash commands. Model changes require Freebuff's interactive new-session model picker.

If Desktop discovery is configured with FREEBUFF_ORCHESTRATOR_URL, Desktop remains the selected runtime unless FREEBUFF_MCP_CLI_MODE = 'pty' is set in the server's environment. For a CLI installed outside PATH, set FREEBUFF_CLI_PATH to its absolute executable path (for example /Users/YOUR_NAME/.config/manicode/freebuff). freebuff_status will identify which runtime was selected.

On macOS, a posix_spawnp failed error is emitted with the executable and working directory. Verify the CLI is executable, its interpreter exists, and the native node-pty binary matches the Node architecture. Repeated failures after many PTY launches can indicate the known node-pty macOS pseudo-terminal descriptor leak; restart the bridge and update node-pty when a fixed stable release is available.

Live Desktop progress

When Desktop is discovered, the bridge subscribes to its read-only /api/events stream. Use get_thread_progress with a thread ID to poll bounded, in-memory progress events. Pass afterSequence from the previous response for incremental reads. watch_thread provides bounded long-polling for up to 30 seconds. These views can show turn state, assistant updates, tools, command summaries, file changes, and completion/failure while a task is running. get_thread remains the saved snapshot and may include a live summary; event history is intentionally not persisted. CLI mode reports Desktop live events as unavailable and continues to expose PTY output.

For a simpler view, call get_thread_progress_summary. It reports the current phase (Planning, Reading files, Running tests, Editing files, Reviewing changes, Waiting for input, Completed, or Failed), latest meaningful update, active tool/command, changed files, last error, seconds since the last event, and whether the stream is stale. watch_active_threads returns the latest summary for every active Desktop thread. Detailed reasoning deltas are omitted by default.

Run directly with npm or npx

The default serve command speaks MCP v2 over stdio and exposes Freebuff read state as structured resources (freebuff://projects, project threads, thread messages, and progress). Use serve-acp for the ACP adapter; it implements the stable ACP v1 wire contract while the ACP v2 SDK remains experimental.

Install the published package:

npm install --global freebuff-mcp

Or install the latest GitHub checkout. The repository includes compiled dist/src files, so this does not require a local TypeScript build:

npm install --global github:Praket7/freebuff-mcp

Then verify the selected runtime:

freebuff-mcp doctor

The same server can be configured without a global install:

[mcp_servers.freebuff]
command = 'npx'
args = ['-y', 'freebuff-mcp@latest', 'serve']
enabled = true

[mcp_servers.freebuff.env]
FREEBUFF_PROJECT_ROOT = 'C:\Users\YOUR_NAME\Documents\FreeBuff WORK'

Build from GitHub

For development or a local source build, build it from GitHub:

git clone https://github.com/Praket7/freebuff-mcp.git
cd freebuff-mcp
pnpm install
pnpm build

Then point Codex at dist/src/cli.js:

[mcp_servers.freebuff]
command = 'node'
args = ['C:\path\to\freebuff-mcp\dist\src\cli.js', 'serve']
enabled = true

[mcp_servers.freebuff.env]
FREEBUFF_PROJECT_ROOT = 'C:\Users\YOUR_NAME\Documents\FreeBuff WORK'

Optional HTTP transport

You do not need HTTP or Cloudflare for local Codex use. Stdio is the safer default. Use HTTP only when another MCP client must reach this bridge.

$env:FREEBUFF_MCP_TOKEN = '<long-random-value>' # PowerShell
freebuff-mcp serve-http

On macOS/Linux, use export FREEBUFF_MCP_TOKEN='<long-random-value>' before starting it. It listens on 127.0.0.1:8788 by default, and /mcp always requires Authorization: Bearer <token>. Non-loopback binding is refused unless FREEBUFF_MCP_ALLOW_REMOTE=1; if enabled, use a trusted HTTPS tunnel or private VPN and never expose the port directly to the Internet.

Cloudflare is optional

Cloudflare is only one possible HTTPS tunnel for remote access. It is not required for local use, npm publication, GitHub, or Desktop discovery. Use it only if you specifically want a Cloudflare-managed hostname for the authenticated HTTP bridge.

Development and verification

pnpm install
pnpm typecheck
pnpm test
pnpm build
pnpm pack:check

The bridge rejects unsafe identifiers and paths, redacts credential-like fields, and never returns Freebuff credentials.

User workflow

Install the package and run freebuff-mcp doctor first. The result tells you which runtime is selected and whether live progress is connected.

Use freebuff-mcp install to print a current Codex setup. Use freebuff-mcp install --write when you want the tool to add the setup for you. Restart Codex after changing the file.

Start with freebuff_status, then use list_projects, list_threads, and search_history. Use get_thread_progress_summary for a readable progress view and watch_active_threads when several tasks are running.

The bridge reports read only Desktop access separately from verified Desktop writes. Unsupported write tools are not registered in read only mode. CLI mode remains available as an explicit choice through FREEBUFF_MCP_CLI_MODE = 'pty'.

Progress reconnects automatically and resumes from sequence numbers supplied by the client. The event window is bounded and sensitive reasoning fragments are omitted by default.

For remote HTTP use, create a long random FREEBUFF_MCP_TOKEN, keep the host on loopback unless a trusted private network is used, and place HTTPS and access control in front of any remote route. Cloudflare is optional and is not part of local setup.

This package does not contain an OpenCode adapter. OpenCode integrations must send model selections as { providerID, modelID } and use provider-specific variants; low/high are not agent names. OpenCode session model/reasoning mutation should not be exposed unless the adapter implements the corresponding supported server operation. Configure and authenticate OpenCode separately with its own CLI/server tools.

Available Tools

14 tools
freebuff_statusB
Read-only

Detect Freebuff and bridge capabilities.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true, and the description's 'Detect' is consistent with that, so there is no contradiction. However, the description adds no behavioral context beyond the annotation, such as what a successful or failed detection looks like or what the returned status actually contains.

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, repetition, or unnecessary detail. For a zero-parameter capability check, this is an appropriately sized and well-structured description.

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 no-parameter, read-only status tool the description is nearly sufficient, but there is no output schema and no explanation of how the returned capabilities are represented or what 'Freebuff' and 'bridge' actually refer to. It tells an agent what the tool is for, but not enough about the result to be fully self-contained.

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?

This tool has zero parameters and the schema fully documents that, so no parameter explanation is needed. The description does not need to compensate for any schema gap.

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 ('Detect') and names a clear resource ('Freebuff and bridge capabilities'), which distinguishes it from sibling tools that operate on projects, threads, and messages. However, 'Freebuff' and 'bridge capabilities' are undefined domain terms, so the purpose is clear in outline but not fully precise.

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?

No guidance is given about when to call this tool, when not to call it, or how it relates to alternatives. The only implied context is 'when you need capability status,' but that is not stated explicitly.

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

get_active_workC
Read-only

Read visible active work.

ParametersJSON Schema
NameRequiredDescriptionDefault
threadIdNo

TDQS

C2.6/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true and openWorldHint=false, and the description's 'Read' matches that. The description adds a vague scope qualifier ('visible', 'active') but does not clarify what 'visible' or 'active' mean operationally, nor does it disclose filtering, permissions, or output behavior beyond the annotations.

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

Conciseness3/5

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

The description is very short and front-loaded, with no filler words. However, the brevity crosses into under-specification because key concepts like 'active work' and 'visible' are not explained, making the definition terse rather than sufficiently informative.

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 read-only tool with one optional parameter and no output schema, some ambiguity might be tolerable, but the description does not explain what 'active work' is, what the response contains, or how this relates to threadId. An agent lacks enough context to confidently invoke the tool or interpret its result.

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 schema has one parameter, threadId, with no description and 0% schema description coverage. The description does not mention threadId or explain its effect, so the parameter's meaning is left to its name and type alone. The description fails to compensate for the absent schema documentation.

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

Purpose3/5

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

The description uses a specific verb ('Read') and names a resource ('visible active work'), so it is not a tautology. However, 'active work' is ambiguous and the description does not differentiate this tool from sibling read tools such as get_thread or list_threads. An agent would still have to infer what 'active work' means.

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?

No when-to-use guidance or alternatives are provided. The description does not explain when to choose get_active_work over sibling tools like get_thread, get_thread_messages, or list_projects. This leaves the agent to guess the tool's specific role.

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

get_threadB
Read-only

Read thread metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
threadIdYes

TDQS

B3.3/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true and openWorldHint=false, so the safe, read-only nature is covered. The description adds a mild scoping detail by saying 'metadata' rather than full thread messages, but it does not disclose response shape, possible errors, or any other behavioral context.

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 wasted words. It conveys the core operation efficiently, though it is so terse that it carries little beyond the tool name itself.

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?

This is a low-complexity, read-only, single-parameter tool, so the minimal description is partially adequate. However, with no output schema and no mention of what metadata is returned, the agent still lacks some context needed to interpret the result.

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%, and the description adds no meaning to the threadId parameter beyond what the property name/type already imply. While a single string threadId is fairly self-explanatory, the description fails to compensate for the complete lack of parameter documentation.

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 ('Read') and a specific resource ('thread metadata'), and it is clearly distinguishable from sibling tools: get_thread_messages would read messages, and list_threads would list threads. Even without an explicit comparison, an agent can infer the tool's narrow scope.

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?

The description gives no guidance about when to use this tool versus alternatives such as get_thread_messages or list_threads. No contexts, exclusions, or prerequisite conditions are mentioned, so the agent must rely on naming conventions alone.

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

get_thread_messagesA
Read-only

Read visible messages for a thread.

ParametersJSON Schema
NameRequiredDescriptionDefault
threadIdYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the read-only nature is expected. The description adds the qualifier 'visible', suggesting some filtering of messages, but it does not clarify what visible means or whether responses include message content, ordering, or metadata. With annotations covering the safety profile, the added behavioral context is modest.

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 or redundancy. Every word contributes to identifying the operation and its object, and the core action is clear at the start.

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 simple read-only tool with one parameter and no output schema, the description covers the basic operation but leaves ambiguous what 'visible' means and what the response contains (text, metadata, ordering). Since no output schema exists, the description would need additional context about the return shape to be fully complete.

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?

The input schema has 0% description coverage and only declares threadId as a string with no explanation. The phrase 'for a thread' weakly maps the parameter to a thread identifier, but it does not specify the expected format or how to obtain valid IDs. For a single, obvious identifier parameter this is adequate, though not rich.

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 verb (Read) and a specific resource (visible messages for a thread), which separates it from the sibling get_thread that would target thread metadata. It could be stronger by explicitly naming the sibling it is not, but the resource identification is sufficiently clear.

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 the tool is used when a thread ID is available and visible messages are needed, but it provides no explicit guidance for when to choose this over get_thread or list_threads. No prerequisites, exclusions, or alternatives are mentioned, leaving the usage context implicit.

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

list_modelsA
Read-only

List models exposed by the installed bridge.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, and the description does not contradict it. It adds the scoping detail that models come from the installed bridge, but it does not disclose return format or any other behavioral traits.

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 stays free of redundancy. Every word 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 tool is a simple read-only list operation with no parameters and no output schema, so the description is nearly sufficient. It could be slightly stronger by noting that the listed model identifiers are what set_model consumes, but this is a minor gap.

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 input schema has zero parameters and 100% schema coverage, so there is nothing for the description to clarify. Per the 0-parameter baseline, this is adequate.

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 and resource ('List models') and scopes the source ('exposed by the installed bridge'), clearly distinguishing it from sibling tools like set_model, list_projects, and list_threads.

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 intended use—discover available models before selecting one with set_model—is implied by the tool's name and sibling set, but not explicitly stated. No when-to-use conditions or exclusions are given.

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

list_project_filesC
Read-only

List safe project files.

ParametersJSON Schema
NameRequiredDescriptionDefault
relativeNo
projectIdYes

TDQS

C2.4/5.0
Behavior2/5

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

Annotations declare readOnlyHint=true, which is consistent with the description. However, the description adds only the vague qualifier 'safe' without explaining what makes a file safe (e.g., filters, size limits, binary exclusion), nor does it disclose return format or edge-case behavior.

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

Conciseness2/5

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

The description is extremely short and front-loaded, but it is under-specified rather than concisely complete. The single sentence omits essential context that the tool requires, so brevity is achieved at the expense of usefulness.

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 0% schema coverage, no output schema, and a meaningful qualifier like 'safe', the description is incomplete. It does not explain the filtering semantics, the purpose of the 'relative' parameter, or how the result list behaves, leaving critical gaps for the agent.

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 does not mention either parameter. The 'relative' parameter is especially opaque, and with no schema descriptions or parameter explanations, the agent cannot determine what values are valid or what behavior they control.

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 the verb 'List' and the resource 'project files' clearly, so an agent can tell this is a listing operation. The qualifier 'safe' is ambiguous, but the core purpose is understandable and distinct from sibling tools like read_project_file.

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?

No guidance is provided on when to use this tool versus alternatives. It does not mention read_project_file, list_projects, or any condition for choosing this tool, so the agent is left to infer usage from the name and sibling list.

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

list_projectsA
Read-only

List discovered Freebuff projects.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the description doesn't need to restate its read-only nature. It adds the 'discovered' scope, indicating only discovered projects are returned, but it does not disclose pagination, ordering, or return structure. This is acceptable given the simple listing operation.

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. It states exactly what the tool does in minimal words, which is ideal for a trivial no-argument listing operation.

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-only list tool, the description is nearly sufficient. The only minor gap is the unexplained meaning of 'discovered' and the lack of an output schema, but the operation is simple enough that an agent can infer the expected behavior from the tool name and siblings.

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 the schema coverage is 100%, so there is nothing for the description to add about parameters. Per the baseline for zero-parameter tools, a score of 4 is appropriate; no parameter documentation is needed.

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 a specific resource ('discovered Freebuff projects'), making its function immediately clear. The qualifier 'discovered' adds scope beyond the tool name, and the resource is distinct from siblings like list_threads and list_project_files.

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?

No guidance is provided about when to use this tool versus alternatives such as list_threads or list_project_files. The description does not mention conditions, exclusions, or contexts that would help an agent choose between sibling tools.

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

list_threadsC
Read-only

List Freebuff Desktop threads.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdNo

TDQS

C2.7/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true, so the read-only nature is transparent. However, the description itself adds no behavioral details (e.g., no mention of sorting, pagination, or what a 'thread' entails). Since the annotation covers the key safety aspect, a baseline score of 3 is appropriate.

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, concise sentence with no wasted words or extraneous information. It follows a clear 'verb + resource' structure, making it easy to parse quickly.

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?

The tool is simple, but the description omits critical context: parameter semantics, usage scenarios, output format (since there is no output schema), and any edge cases. This leaves significant gaps for an agent to call the tool correctly.

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?

The only parameter, projectId, has no description in the schema, and the tool description does not explain its meaning or optionality. With 0% schema description coverage and no textual clarification, the agent has no semantic understanding of this parameter.

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 action ('List') and the resource ('Freebuff Desktop threads'), making the primary purpose unambiguous. However, it lacks any context about what 'Freebuff Desktop' refers to or whether threads are scoped to a project, which prevents a perfect score.

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

Usage Guidelines1/5

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

The description provides no guidance on when to use this tool versus alternatives like get_thread or get_thread_messages. No prerequisites, expected input conditions, or typical scenarios are mentioned, leaving the agent without direction for tool selection.

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

read_project_fileC
Read-only

Read one safe project file.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
projectIdYes

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, so the read-only nature is covered by structured data. The description adds no concrete behavioral details such as what 'safe' means, whether path traversal is blocked, what the return payload is, or how errors are reported.

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 wasted words. It is concise, though the ambiguous 'safe' term could be replaced with more informative content without making the description longer.

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 no output schema and no parameter descriptions, the description is too thin. It does not explain what 'safe project file' means, how the path should be specified, or how this tool complements list_project_files, leaving too much for the agent to infer.

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% and the description does not explain the parameters. While 'projectId' and 'path' are self-descriptive names, the description does not clarify path semantics, format, or constraints, so it fails to 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 uses a clear action verb, 'Read,' and identifies the resource, 'project file.' The qualifier 'one' helps distinguish it from list_project_files (list vs read a single file). However, 'safe' is ambiguous and not elaborated, slightly weakening clarity.

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 on when to use this tool over list_project_files, get_thread, or other siblings, and no mention of prerequisites like a valid projectId or path format. Use cases must be inferred from the tool name rather than stated.

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

resume_threadC

Resume a paused Freebuff thread.

ParametersJSON Schema
NameRequiredDescriptionDefault
threadIdYes

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already indicate this is a mutation (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds nothing beyond the verb 'resume' – it does not disclose side effects, required permissions, or what happens to the thread's state. With annotations present, the bar is lower, but the description still fails to add meaningful behavioral context.

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 with no redundancy. It is appropriately concise for the tool's simplicity, and the verb is front-loaded. No waste.

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 simple mutation with one parameter, the description is minimal but incomplete. It lacks information about expected outcomes, error conditions, or any prerequisites. Given no output schema and no usage guidance, an agent cannot fully understand what will happen when the tool is called.

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?

The schema has zero description coverage for the single parameter threadId. The description does not explain what threadId refers to (e.g., a valid thread ID, format, or how to obtain it). Since the description is the only source of parameter meaning, this is a significant gap.

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 verb ('Resume') and resource ('a paused Freebuff thread'), which identifies the operation unambiguously. It is distinct from siblings like stop_thread or get_thread, though it doesn't explicitly name the alternative. The phrasing is specific enough to convey the action.

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 on when to use this tool versus alternatives, no prerequisites mentioned (e.g., thread must be paused), and no exclusions or context about typical use cases. The description implies use when a thread is paused, but it is left to the agent to infer.

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

send_messageA

Send a text prompt to an existing Freebuff thread.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
threadIdYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false), so the bar for additional disclosure is lower. The description adds the 'existing thread' precondition, implying failure for unknown thread IDs, but it does not disclose side effects such as appending to conversation history 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?

A single 10-word sentence with zero filler, front-loaded with the action verb. Nothing is redundant or extraneous.

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 two-parameter tool with no output schema, the description is close to adequate and implicitly identifies both inputs. However, it never states what the tool returns (e.g., the model's reply) or error conditions, which matters more given that no output schema exists to carry that burden.

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, but it only loosely maps 'text prompt' to text and 'existing' to threadId. The schema property names are already self-explanatory, and the description adds no format, length, or usage details beyond them.

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 ('send') with a specific resource and scope ('text prompt to an existing Freebuff thread'), making the operation unmistakable. It is clearly distinct from the sibling read-only tools (freebuff_status, list_projects, list_threads).

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?

No explicit when-to-use or when-not-to-use guidance is provided, and no alternative tools are named. The intended context is implied by contrast with the list/status siblings, but the description never states prerequisites like 'obtain threadId via list_threads first' or excludes other send/update tools.

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

set_modelC

Set the model for an existing thread when supported.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYes
threadIdYes
harnessIdNo

TDQS

C2.6/5.0
Behavior2/5

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

The annotations already indicate this is a mutating operation (readOnlyHint=false) but not destructive (destructiveHint=false), and the description adds little beyond that. It does mention 'existing thread' and 'when supported,' but it does not disclose what happens to the thread's conversation, whether the change persists, or whether unsupported models cause errors. No contradiction with annotations exists, but the behavioral context is thin.

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, direct sentence with no filler or redundant information. It front-loads the core action and resource. It is concise, though the vague 'when supported' could be replaced with more concrete conditions without hurting readability.

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 three parameters and no output schema, the description is too thin to fully support correct invocation. It does not explain how to identify a supported thread, what model naming convention to use, or what harnessId means, and it offers no guidance relative to sibling tools. The flat schema and simple operation lower the bar, but 'when supported' still leaves critical context missing.

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 none of the three parameters (threadId, model, harnessId) are described in the schema. The description only mentions 'model' and 'existing thread' generically, giving no semantics for valid model values, the role of threadId, or the optional harnessId. With zero schema coverage, the description needed to compensate and does not.

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 ('Set') and a clear resource ('the model for an existing thread'), so an agent can understand the core action. It does not explicitly differentiate from siblings, but none of the siblings perform the same model-setting operation, so the ambiguity is mild. The phrase 'when supported' introduces some uncertainty but does not obscure the main purpose.

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?

The description gives only a vague condition ('when supported') and no concrete guidance about when to call this tool versus alternatives, what makes a thread 'support' model changes, or what prerequisites must hold. It also does not explain when this tool should not be used or how it relates to siblings like list_models or send_message. This leaves usage decisions largely to inference.

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

set_reasoningC

Set the reasoning effort for an existing thread when supported.

ParametersJSON Schema
NameRequiredDescriptionDefault
effortYes
threadIdYes

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already indicate a mutating operation (readOnlyHint: false) with no destructive flag. The description adds only the vague qualifier 'when supported,' which doesn't disclose concrete behavior such as whether the change takes effect immediately, whether it requires specific permissions, or whether it can be reversed. With annotations present, some credit is given, but the description adds minimal behavioral context.

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 that front-loads the primary action. It avoids fluff and is appropriately sized for a simple operation. The brevity is a positive trait, though it sacrifices necessary detail.

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

Completeness1/5

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 output schema, the description is woefully incomplete. It omits what reasoning effort means, how to select appropriate values, when the operation succeeds or fails, and how it relates to sibling tools like set_model. An agent would have to infer most of the necessary context from parameter names alone.

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%, so the description must compensate for the lack of parameter meaning. It does not explain what 'effort' values are valid, what 'threadId' refers to beyond being a thread identifier, or the relationship between the two. The schema only provides types (string|null for effort), leaving the agent to guess allowed values or formats. The description fails to add any semantic value.

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: 'Set the reasoning effort' on a thread. It identifies the resource (thread) and the specific attribute (reasoning effort), which distinguishes it from sibling tools like set_model or send_message. However, it doesn't explicitly differentiate from alternatives, so it's clear but not fully distinguishing.

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?

No guidance on when to use this tool versus alternatives. The phrase 'when supported' hints at conditional applicability, but it doesn't explain which threads or models support it, nor does it mention when to prefer set_reasoning over set_model or other thread-management tools. An agent has to infer context.

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

stop_threadB

Stop a running Freebuff turn.

ParametersJSON Schema
NameRequiredDescriptionDefault
threadIdYes

TDQS

B3/5.0
Behavior2/5

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

The annotations indicate this is neither read-only nor destructive, but the description adds no detail about what stopping a turn actually does, such as whether work is lost or whether the turn can be resumed. No contradiction with annotations is present, but the description alone does not disclose behavioral consequences.

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 short sentence with no filler, and the action is front-loaded. It loses a point for using the unexplained term 'Freebuff turn,' but overall it is efficiently sized.

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 tool with one required parameter, the description provides a minimally viable statement of the operation, but it leaves out behavioral effects, when to use it, and how the threadId relates to the action. With no output schema and sparse annotations, slightly more context would make it 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%, and the description does not mention threadId or explain that it identifies the thread whose turn should be stopped. The parameter name is fairly self-explanatory, but the description does nothing to compensate for the missing schema documentation.

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 action, 'Stop', and the resource, 'a running Freebuff turn', so the core operation is clear. It does not explicitly name sibling tools, so differentiation from resume_thread is only implicit.

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 word 'running' implies the tool is for stopping an in-progress turn, but the description gives no explicit guidance about when not to use it or that resume_thread is the counterpart for resuming afterward. Usage context is inferred rather than directly stated.

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. 14 tool updatesv0.1.0
    • First observedfreebuff_status
    • First observedget_active_work
    • First observedget_thread
    • First observedget_thread_messages
    • First observedlist_models
    • First observedlist_project_files
    • First observedlist_projects
    • First observedlist_threads
    • First observedread_project_file
    • First observedresume_thread
    • First observedsend_message
    • First observedset_model
    • First observedset_reasoning
    • First observedstop_thread

TDQS

B3.3/5.0

Scored across 14 tools

Disambiguation5/5

Each tool targets a distinct resource/action: status, projects, threads, messages, active work, files, models, and thread controls are clearly separated. get_thread vs get_thread_messages and send_message vs resume_thread are differentiated by metadata/content and new-prompt vs resume semantics.

Naming Consistency4/5

Most tools follow a verb_noun snake_case pattern (list_*, get_*, send_message, set_model), which is predictable. The main outlier is freebuff_status, which lacks a verb, and read_project_file introduces a minor verb variation versus get_*.

Tool Count5/5

At 14 tools, the surface is well-scoped for a Freebuff bridge: discovery/status, project/thread inspection, file access, model listing, messaging, and turn control each have a place. No tool feels redundant or bloated.

Completeness4/5

The set covers the main inspect-and-interact workflow: list/read threads and files, send messages, stop/resume turns, and configure model/reasoning. Obvious gaps are thread/project creation/deletion and explicit per-thread model/reasoning read-back, though these may be intentionally outside the bridge's scope.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers