Skip to main content
Glama
vola-trebla

toad-mcp-server

by vola-trebla

toad-mcp-server

TypeScript Node.js MCP Zod ESLint Prettier CI License

šŸ”Œ MCP server exposing portfolio AI tools via Model Context Protocol. Connect to Claude Desktop and call Semantic Search, Eval Framework, and Prompt Management tools directly from chat.

šŸ—ļø Architecture

ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”    stdio / HTTP     ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
│   Claude Desktop    │◄────────────────-──►│    toad-mcp-server       │
│   (MCP Client)      │                     │                          │
ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜                     │  ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”  │
                                            │  │ toad_search_docs   │──┼──► Semantic Search API
                                            │  ā”œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¤  │
                                            │  │ toad_run_eval      │──┼──► Eval Framework API
                                            │  ā”œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¤  │
                                            │  │ toad_system_status │──┼──► Health checks
                                            │  ā”œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€-────┤  │
                                            │  │ toad_list_prompts  │  │
                                            │  ā”œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¤  │
                                            │  │ toad_get_prompt    │  │
                                            │  ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜  │
                                            ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜

Related MCP server: claude-rag-mcp

šŸ› ļø Tools

Tool

Description

Read-only

toad_search_documents

Semantic search over documents via natural language query

Yes

toad_run_eval

Run eval suite against a prompt variant, returns scores

No

toad_system_status

Health check all portfolio services (latency, status)

Yes

toad_list_prompts

List prompts with pagination and tag filtering

Yes

toad_get_prompt

Get prompt by name with version, template, score history

Yes

All tools support response_format: "markdown" | "json" where applicable.

šŸ“¦ Resources

URI

Description

toad://system/status

Health status of all services (JSON)

toad://prompts/{name}

Get prompt by name with full metadata (JSON)

šŸš€ Quick Start

# Install
npm install

# Build
npm run build

# Run (stdio — for Claude Desktop)
npm start

# Run (HTTP — for remote/multi-client access)
TRANSPORT=http npm start

# Dev mode
npm run dev

šŸ–„ļø Claude Desktop Setup

  1. Build the server:

    npm run build
  2. Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

    {
      "mcpServers": {
        "toad-mcp-server": {
          "command": "node",
          "args": ["dist/index.js"],
          "cwd": "/absolute/path/to/toad-mcp-server",
          "env": {
            "SEMANTIC_SEARCH_URL": "http://localhost:3001",
            "EVAL_FRAMEWORK_URL": "http://localhost:3002"
          }
        }
      }
    }
  3. Restart Claude Desktop — tools appear automatically.

šŸ” Testing with MCP Inspector

npx @modelcontextprotocol/inspector node dist/index.js

Opens a web UI to test each tool interactively.

āš™ļø Environment Variables

Variable

Default

Description

SEMANTIC_SEARCH_URL

http://localhost:3001

Semantic Search Engine endpoint

EVAL_FRAMEWORK_URL

http://localhost:3002

Eval Framework endpoint

TRANSPORT

stdio

Transport mode: stdio or http

PORT

3100

HTTP transport port

HOST

127.0.0.1

HTTP transport bind address

šŸ“œ Scripts

Script

Description

npm run build

Compile TypeScript to dist/

npm run dev

Run with tsx (hot reload)

npm start

Run compiled server

npm run lint

ESLint check

npm run format

Prettier format

🧱 Tech Stack

  • TypeScript (NodeNext, strict)

  • @modelcontextprotocol/sdk — MCP server SDK

  • Zod v4 — input validation

  • ESLint + Prettier + Husky — code quality

  • GitHub Actions — CI (lint → format → build)

šŸ“„ License

ISC

Available Tools

5 tools
toad_get_promptA
Read-onlyIdempotent

Get a specific prompt by name with full metadata including version, score history, and template content.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPrompt name to retrieve
response_formatNoResponse format: markdown for human reading, json for machine processingmarkdown

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the agent knows this is a safe read operation. The description adds useful behavioral context by listing exactly what metadata is returned (version, score history, template content), going beyond the structured annotations.

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 object, then specifies the metadata scope. Every word contributes value; no filler or redundancy.

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 get-by-name read operation with an optional response format. The description covers the core return content, which partially compensates for the absence of an output schema. Minor omissions like exact-name matching or not-found behavior are not critical for this tool's simplicity and are outweighed by annotation-covered safety.

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 coverage is 100%, so both name and response_format are fully documented in the schema. The description reinforces that the name parameter is the prompt identifier, but does not add material detail beyond what the schema already provides. Baseline 3 is appropriate.

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 clearly states the verb 'Get', the resource 'specific prompt by name', and the key content returned: 'full metadata including version, score history, and template content'. It implicitly distinguishes itself from toad_list_prompts by emphasizing retrieval of one named prompt rather than enumeration.

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 'specific prompt by name' gives clear context that this tool is for targeted retrieval when the prompt name is known. It does not explicitly name alternatives like toad_list_prompts or toad_search_documents, but the intended use case is reasonably clear.

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

toad_list_promptsA
Read-onlyIdempotent

List available prompts from the Prompt Registry. Supports pagination and optional filtering by tag.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoFilter prompts by tag
limitNoMaximum number of prompts to return
offsetNoNumber of prompts to skip
response_formatNoResponse format: markdown for human reading, json for machine processingmarkdown

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the registry source and pagination/filtering capability but doesn't describe return format or output structure. This is adequate given the annotation coverage, though not richer than necessary.

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?

Two short sentences with no filler. The main action is stated first, followed by capability details. Every word earns its place.

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

Completeness5/5

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

For a simple read-only list operation, the description plus the fully documented schema and safety annotations are sufficient. No output schema is present, but 'list' clearly implies a list of prompts. There are no missing details an agent would need to call this tool 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 100%, so the schema already documents all four parameters. The description adds a high-level mention of 'pagination and optional filtering by tag' but no new details beyond what the schema provides. Baseline 3 is appropriate.

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 ('prompts from the Prompt Registry'), which clearly distinguishes it from siblings like toad_get_prompt (single prompt) and toad_search_documents (document search). Its scope is immediately understandable.

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: use this to list available prompts, with pagination and optional tag filtering. It doesn't explicitly mention when to use a sibling instead, but the 'List' framing and mention of registry make the intended use obvious.

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

toad_run_evalA
Idempotent

Run an evaluation suite from the Eval Framework. Executes test cases against a prompt variant and returns scores and pass/fail results.

ParametersJSON Schema
NameRequiredDescriptionDefault
suiteYesName of the eval suite to run
variantNoPrompt variant to evaluatedefault

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate non-read-only, idempotent, non-destructive behavior. The description adds that it executes test cases and returns scores and pass/fail results, which is useful context. It does not disclose potential side effects such as external model calls, result storage, or runtime cost, but the annotations cover part of this burden.

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 short sentences with no filler. It leads with the primary action, then expands with the execution and output behavior, making it easy to scan.

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 simple tool with one required parameter and no output schema, the description covers the essential input and output behavior: it runs test cases and returns scores and pass/fail results. It does not explain error cases or whether results are persisted, but given the annotations and low complexity, it is reasonably 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?

Schema coverage is 100%, so the schema already fully documents 'suite' and 'variant'. The description loosely mirrors those meanings by mentioning 'evaluation suite' and 'prompt variant', but adds no additional detail about formats, defaults, or value 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 ('Run') and a specific object ('an evaluation suite from the Eval Framework'), then clarifies the action with 'Executes test cases against a prompt variant'. This clearly separates it from the sibling tools, which are about document search, system status, and prompt retrieval.

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 makes the main use case obvious: run an eval suite and see pass/fail results. However, it does not explicitly state when to choose this tool over alternatives, nor does it mention prerequisites such as the suite existing or which variant is appropriate.

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

toad_search_documentsA
Read-onlyIdempotent

Search documents using semantic similarity. Connects to the Semantic Search Engine to find relevant documents based on a natural language query.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return
queryYesNatural language search query

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already cover safety with readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds the useful detail that the tool connects to an external Semantic Search Engine, implying external dependency, but it does not describe result structure, pagination, or other behavioral caveats. This is acceptable but not rich.

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?

Two short sentences cover purpose and context without filler. The core action is front-loaded in the first sentence, and the second sentence adds necessary context about the connection to the Semantic Search Engine and natural language queries.

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 simple two-parameter, read-only search tool, the description is nearly complete. It states what it searches, how it searches, and what kind of query to provide. The only gap is that there is no output schema and the description does not explicitly describe the return shape, though 'find relevant documents' implies a list of matching documents.

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 100%, so the baseline is 3. The description adds value by explaining that the query is interpreted semantically and should be a natural language expression, not a keyword syntax. The limit parameter is already fully documented in the schema, so no further compensation 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 uses a specific verb and resource: 'Search documents using semantic similarity.' It clearly differentiates from sibling tools like toad_run_eval, toad_system_status, and prompt-related tools, so an agent can identify this as the document search tool without ambiguity.

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 establishes clear usage context: use this tool for semantic similarity search over documents with a natural language query. It does not explicitly list exclusions or alternative tools, but the sibling tools are topically distinct, so no conflicting usage guidance is needed.

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

toad_system_statusA
Read-onlyIdempotent

Check health of all portfolio services: Semantic Search API and Eval Framework. Returns status, latency, and error details for each component.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds value by disclosing the output scope (status, latency, error details) and the fact that coverage spans both services, which is not derivable from annotations alone.

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?

One sentence with no filler. It front-loads the verb and resource, then specifies components and return fields. Every element contributes to understanding.

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

Completeness5/5

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

Given no parameters, rich annotations, and the simple nature of a status check, the description covers the essential input, output, and scope. The absence of an output schema is mitigated by explicitly mentioning status, latency, and error details.

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, so there is nothing to document. The 100% schema coverage is trivially satisfied, and the baseline of 4 applies as no param semantics are 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?

Description states a clear verb ('Check health') and specific resource ('all portfolio services') with named components (Semantic Search API, Eval Framework). It naturally differentiates from sibling tools focused on searching, running evals, or managing prompts.

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 tool's purpose as a health check is immediately clear, providing ample context for when an agent would invoke it. It does not explicitly mention alternatives or exclusion criteria, but siblings are clearly distinct operations, so the absence of direct comparison is acceptable.

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. 5 tool updatesv1.0.0
    • First observedtoad_get_prompt
    • First observedtoad_list_prompts
    • First observedtoad_run_eval
    • First observedtoad_search_documents
    • First observedtoad_system_status

TDQS

A4.1/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct capability: semantic search, eval execution, system health, prompt listing, and prompt detail retrieval. The relationship between list_prompts and get_prompt is complementary rather than ambiguous.

Naming Consistency5/5

All tools follow the same `toad_` prefix with a clear verb_noun pattern: search_documents, run_eval, system_status, list_prompts, get_prompt. This makes the toolset highly predictable.

Tool Count5/5

Five tools is well-scoped for a specialized server covering search, evaluation, system health, and prompt registry access. Each tool earns its place without redundant or unnecessary entries.

Completeness3/5

The server supports read/search/run workflows, but lacks prompt registry write operations (create/update/delete) and any way to list available eval suites. Agents may encounter dead ends when trying to discover eval inputs or manage prompt lifecycle.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    AI-powered MCP server that enables Claude and other LLMs to interact directly with construction documents, drawings, and specifications through advanced RAG and hybrid search capabilities.
    9
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server providing RAG context and failure capture for Claude Code, enabling semantic search across project knowledge and storing/analyzing failures.
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    An MCP server that exposes an AI project portfolio as queryable tools, allowing users to ask about projects, search by technology, or get details via natural language.
    1
    MIT