Skip to main content
Glama
gituser5525

mcp-doc-search

by gituser5525

MCP Doc Search

MCP Document Search Server

Overview

This project was built as a hands-on exercise to understand the Model Context Protocol (MCP) by implementing all three core MCP primitives:

  • Prompts

  • Tools

  • Resources

The final outcome is a simple documentation search MCP server that exposes:

  • A search_docs tool for searching documentation

  • Dynamic resources representing documents stored in a local docs/ folder

The server can be tested and explored using the MCP Inspector.


Related MCP server: RootApp Documentation MCP Server

MCP Concepts Learned

1. Prompts

Prompts are reusable instruction templates exposed by an MCP server.

Pattern:

  • prompts/list

  • prompts/get

Example:

simple

A client can discover available prompts and retrieve the prompt content.


2. Tools

Tools expose executable functionality.

Pattern:

  • tools/list

  • tools/call

Examples implemented during learning:

fetch
add
multiply
search_docs

A tool receives arguments, performs some action, and returns structured results.


3. Resources

Resources expose data that can be read by a client.

Pattern:

  • resources/list

  • resources/read


Examples:

```text
docs://mcp
docs://architecture
docs://retrieval

Resources represent existing data and are analogous to files or documents.


MCP Mental Model

Tool     = Function
Resource = File
Prompt   = Template

Examples:

search_docs("MCP")      -> Tool
docs://mcp             -> Resource
code-review-template   -> Prompt

Current Architecture

MCP Client
    │
    ├── search_docs(query)      [Tool]
    │
    └── docs://*                [Resources]
              │
              └── read_resource()

Search Flow

User Query
    ↓
search_docs("MCP")
    ↓
Returns matching resource URIs
    ↓
docs://mcp
    ↓
read_resource("docs://mcp")
    ↓
Returns document content

This demonstrates the common MCP pattern:

Tool → Resource Chain

Project Structure

doc-search/
│
├── README.md
├── pyproject.toml
│
└── mcp_doc_search/
    │
    ├── __init__.py
    ├── __main__.py
    ├── server.py
    │
    └── docs/
        ├── architecture.txt
        ├── retrieval.txt
        └── mcp.txt

Features

Tool: search_docs

Input:

{
  "query": "MCP"
}

Behavior:

  • Searches all .txt files in the docs directory

  • Performs a case-insensitive search

  • Returns matching resource URIs

Example output:

docs://mcp

Resources

Resources are generated dynamically from the docs directory.

Examples:

docs://mcp
docs://architecture
docs://retrieval

Reading a resource returns the document content.


Testing

The server can be tested using MCP Inspector.

Example configuration:

Command:

uv

Arguments:

run python -m mcp_doc_search

The Inspector can then:

  • List tools

  • Call search_docs

  • List resources

  • Read resources


Key Takeaways

  • MCP follows a consistent discovery and execution pattern.

  • Tools are used for actions and discovery.

  • Resources are used for retrieving known content.

  • Prompts are reusable instruction templates.

  • Many knowledge and retrieval servers follow a Tool → Resource architecture.

  • The MCP layer remains stable even when the retrieval implementation evolves from simple file search to BM25, vector search, hybrid search, or databases.


Future Improvements

  • BM25 search

  • Vector search

  • Hybrid search

  • SingleStore integration

  • Result ranking and scoring

  • Resource metadata

  • Claude Desktop / Cursor integration

  • Retrieval-Augmented Generation (RAG)


create venv: uv venv Go to correct toml file and run: uv sync uv run python -m mcp_simple_prompt --help

uv run python -m mcp_doc_search --help

Install inspector: npx @modelcontextprotocol/inspector and runs it port:6274 (For stdio transport, Inspector itself launches the server, so need not run uv run mcp-simple-prompt in another terminal) or run python -m mcp_doc_search in the arguments

Enter the proxy token or launch the Proxy configured url and enter-> Command: uv and arguments: run mcp-simple-prompt

Available Tools

1 tool
search_docsDocs SearcherC

Search the query text in the docs

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesQuery to search

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only restates the search action and does not mention return format, pagination, case sensitivity, error behavior, or any other behavioral trait, leaving the agent without critical context for using the tool safely.

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 a single short sentence, so it is concise and front-loaded. However, it is so terse that it borders on under-specification, merely paraphrasing the title without adding meaningful information. It is appropriately short but lacks substance.

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 only one parameter, no output schema, and no annotations, the description should at least hint at what the search returns or how results are presented. It does not, leaving the agent without essential context about the tool's behavior and output, making the description incomplete for a truly usable tool.

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% (the only parameter 'query' has a description), so the baseline is 3. The tool description adds minimal semantic value by tying 'query' to 'query text', but it does not clarify format, required length, or any constraints beyond what the schema already provides.

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 verb 'Search' and specifies the resource 'the docs', which conveys the tool's primary function. However, 'docs' is somewhat ambiguous (documentation vs. documents), and there are no sibling tools to differentiate from, so it doesn't fully distinguish itself from potential alternatives.

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 vs. alternatives, no prerequisites, and no mention of limitations or edge cases. The description only states what it does, not when it should be invoked, making it no more helpful than the name itself.

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. Dates show when Glama detected each change.

  1. 1 tool updatev0.1.0
    • First observedsearch_docs

TDQS

B3.1/5.0
Disambiguation5/5

With only one tool, there is no possibility of confusing it with another. The tool's purpose is clear from its name and description.

Naming Consistency5/5

The single tool uses a consistent verb_noun pattern, and there are no other tools to introduce inconsistency.

Tool Count3/5

The server has just one tool, which is thin but appropriate for a narrowly-focused search-only service. It falls on the borderline of being too sparse.

Completeness2/5

Only search is supported, with no way to fetch or list documents. This creates a significant gap: after searching, the agent cannot retrieve the actual content of a result.

Maintenance

ActivityStale
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Serves RootApp documentation files with search and retrieval capabilities, enabling users to access specific docs, browse directory structure, and search across file names and content.
    AGPL 3.0
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables searching and retrieving pages from the Suitest documentation via full-text search without live network calls.
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/gituser5525/mcp-doc-search'

If you have feedback or need assistance with the MCP directory API, please join our Discord server