Skip to main content
Glama
mcp-doc-search

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: suitest-docs

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

Inputs: query (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.1/5.0

    Scored across 1 tool

    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.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      Not graded
      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
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables searching and retrieving pages from the Suitest documentation via full-text search without live network calls.
      MIT
    • F
      license
      A
      quality
      C
      maintenance
      Enables MCP-compatible clients to search and read local markdown documentation, allowing agents to retrieve relevant doc snippets or full files by path.
      2
      -
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables agents to search, retrieve, and list Hermes Agent documentation locally, version-matched to the installed commit, with fallback to GitHub when no local checkout exists.
      MIT