Skip to main content
Glama

SourceTap

SourceTap is an MVP of a Model Context Protocol (MCP server that lets your AI assistant learn and search any library directly from its GitHub repository or documentation URL.

Features

This project provides two tools:

  1. query_docs(url, query): A RAG (Retrieval-Augmented Generation) tool.

    • Input: Takes a URL to a ZIP archive (e.g., a GitHub repo archive) and a search query.

    • Process:

      • Downloads the ZIP file (cached via SQLite to prevent redundant downloads).

      • Extracts .md and .mdx content.

      • Indexes the content in-memory using minsearch (TF-IDF/Keyword search).

    • Output: Returns the full content of the top 5 most relevant documentation files.

    • Use Case: Helps AI agents understand libraries that are too new, private, or obscure for their base references.

  2. fetch_web_content(url): A reader tool.

    • Input: Any webpage URL.

    • Process: Proxies the request through r.jina.ai to convert HTML to clean, LLM-friendly Markdown.

    • Output: The text content of the page.

    • Use Case: Inspecting specific documentation pages, blog posts, or issue threads.

Related MCP server: Search Docs MCP

Installation

To use this tool with your AI assistant (e.g., Claude Desktop, Cline), add the following configuration to your MCP Settings file:

{
  "mcpServers": {
    "sourcetap": {
      "command": "uv",
      "args": [
        "--directory",
        "/absolute/path/to/sourcetap",
        "run",
        "python",
        "main.py"
      ]
    }
  }
}

Note: Replace /absolute/path/to/sourcetap with the actual path to this directory on your machine. The uv command will automatically handle dependency installation and environment setup when the server starts.

Project Architecture

The Tech Stack

  • MCP Framework: FastMCP (Python)

  • Web Scraping: Jina Reader API (via httpx)

  • Search Engine: minsearch (TF-IDF/Keyword search)

  • Caching: SQLite with WAL mode

  • Used MCP: Context7

  • AI Assistant: Google Gemini 3 Flash + Antigravity IDE

Caching Strategy

The project uses SQLite for persistent caching of downloaded ZIP files.

  • WAL Mode: Write-Ahead Logging enabled for better concurrent read/write performance.

Search Implementation

Uses minsearch for in-memory document search.

  • Text Fields: Indexes both content and filename for comprehensive search.

  • TF-IDF Scoring: Ranks documents by term frequency-inverse document frequency.

  • Top-K Retrieval: Returns the 5 most relevant documents per query.

  • Memory Efficient: Index is rebuilt per query (no persistent index storage).

Limitations & Possible Improvements

  • Keyword-Only Search: Currently uses TF-IDF. Semantic search with embeddings (e.g., all-MiniLM-L6-v2) would enable conceptual matching.

  • Full-File Retrieval: Returns entire files. Smart chunking by headers would improve precision.

  • Markdown-Only: Only indexes .md and .mdx files. Code parsing (.py, .ts) would enable technical implementation queries.

  • ZIP Archives: Downloads full repositories. GitHub Tree API would enable sparse downloading of only needed files.

  • No Persistent Index: Index is rebuilt per query. Persistent indexing would improve performance for repeated queries.

  • Single-Threaded Cache: SQLite cache is synchronous. Async cache operations would improve throughput.

Available Tools

2 tools
fetch_web_contentC

Download content of any web page using Jina reader.

Args: url: The URL of the web page to fetch content from.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden for behavioral disclosure. It only says 'using Jina reader' and does not mention potential failures, rate limits, authentication needs, content-size limits, or how errors are surfaced.

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

Conciseness4/5

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

The description is short and front-loaded with the core action. The Args section is slightly redundant with the schema but does not bloat the 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?

The tool is simple, has only one parameter, and provides an output schema, which reduces the need to document return values. Still, missing usage guidance and behavioral caveats leave some room for ambiguity about correct invocation.

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

Parameters2/5

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

Schema description coverage is 0%, so the description should compensate. However, 'url: The URL of the web page to fetch content from' adds little beyond what the parameter name 'url' and the tool purpose already imply; no format, examples, or constraints are given.

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 a specific verb ('Download') and resource ('content of any web page'), making the core purpose obvious. It does not explicitly differentiate from the sibling query_docs, but the target of web pages versus docs is reasonably distinct.

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

Usage Guidelines2/5

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

There is no guidance about when to use this tool instead of query_docs, nor any mention of limitations or conditions. The agent must infer usage from the tool name and one-liner.

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

query_docsA

Index and search documentation from a ZIP archive URL.

Args: url: URL to a ZIP file (e.g. GitHub archive) query: Search query

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of disclosing behavior. It does not state whether the operation is read-only, whether it downloads or indexes the archive persistently, what side effects occur, or what happens on large or inaccessible archives. The word 'Index' hints at possible stateful behavior but this is never clarified.

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 concise and front-loaded: a one-sentence purpose followed by a compact argument list. It contains no filler and every part adds useful information. The format is easy to scan and directly actionable for an agent.

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

Completeness3/5

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

The tool is simple, has an output schema, and its parameter semantics are mostly covered. Still, because there are no annotations and no usage-vs-alternative guidance, the description leaves gaps around side effects, network behavior, and when to prefer this over 'fetch_web_content'. It is minimally viable but not 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?

Schema description coverage is 0%, so the description must compensate. It adds useful meaning for 'url' ('URL to a ZIP file, e.g. GitHub archive') and a minimal gloss for 'query' ('Search query'). The query parameter semantics are still thin, with no detail on search syntax, scope, or matching behavior, but the basics are covered.

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 action ('Index and search documentation') on a specific resource ('ZIP archive URL'), which clearly distinguishes this tool from its sibling 'fetch_web_content'. It immediately tells an agent what the tool does and what input domain it operates on.

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 usage is implied: use this when you have a ZIP archive URL containing documentation you want to query. However, there is no explicit guidance about when not to use it, nor any mention of the sibling tool 'fetch_web_content' as an alternative. The exclusion of alternatives is left to inference.

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. 2 tool updatesv0.1.0
    • First observedfetch_web_content
    • First observedquery_docs

TDQS

B3.4/5.0
Disambiguation5/5

The two tools have clearly distinct purposes: fetch_web_content retrieves any web page, while query_docs specifically indexes and searches documentation from a ZIP archive. Although both accept URLs, the actions and outputs are unambiguous.

Naming Consistency5/5

Both tools follow the same verb_noun pattern with lower_snake_case: fetch_web_content and query_docs. The verbs differ but the structure is consistent and predictable.

Tool Count3/5

With only two tools, the server feels quite thin. This is borderline for a useful MCP server, though the tools themselves are substantial and well-defined.

Completeness4/5

The server covers two distinct capabilities: web content retrieval and documentation search. Potential gaps include lacking a way to list or manage indexed docs and no broader web search beyond direct URL fetching, but the core scope is reasonably served.

Maintenance

ActivityInactive
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

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/maxvoltage/sourcetap'

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