skill-mcp

skill-mcp

An MCP server that serves company documentation from a Markdown folder, exposing read-only search and fetch tools for agents to discover and retrieve authoritative documents.

Category
Visit Server

README

skill-mcp

Serve company documentation through one read-only MCP server. Point the server at any compatible Markdown folder and agents get two portable tools: search(query) to discover relevant information and fetch(id) to retrieve an authoritative document with its canonical URL and metadata.

The content model is deliberately broader than Agent Skills. It works for internal-library guidance, data-source instructions, engineering standards, runbooks, architecture notes, and any other bounded company context.

Run the example catalog

Requires Python 3.14 or newer and uv.

git clone https://github.com/jacobragsdale/skill-mcp.git
cd skill-mcp
uv sync --locked
SKILL_MCP_CONTENT_ROOT=/absolute/path/to/skill-mcp/examples/context uv run skill-mcp

Connect an MCP client to http://127.0.0.1:8000/mcp. The readiness endpoint validates the live catalog and reports its document count:

curl http://127.0.0.1:8000/health

FastAPI's OpenAPI UI is available at http://127.0.0.1:8000/docs.

To keep the path in a local file, copy .env.example, set its required value, and load it explicitly:

cp .env.example .env
uv run --env-file .env skill-mcp

The root is selected once at startup. Restart with a different SKILL_MCP_CONTENT_ROOT to serve another compatible folder. Documents inside the selected folder are validated and reread on every tool call, so edits go live without rebuilding or restarting the server.

Add information to search and fetch

Create a UTF-8 Markdown file anywhere below the configured content root. Keep one file focused on one fetchable topic and begin it with this strict YAML frontmatter:

---
id: data/customer-orders
title: Customer order data source
url: https://docs.example.com/data/customer-orders
summary: Find governed customer order data and choose the supported table.
metadata:
  owner: Data Platform
  authority: example
  updated: "2026-08-04"
---

# Customer order data

The supported source is ...

Then validate the entire root:

uv run skill-mcp-validate /absolute/path/to/company-context

Repository contributors can invoke the repo-scoped $add-company-context skill for the complete authoring and retrieval-regression workflow. Do not hardcode topic-specific branches in search or fetch; adding a valid document makes it available to both tools automatically.

Content contract

The configured root is scanned recursively for non-hidden *.md files. Every discovered file must satisfy the contract; one invalid document fails the catalog rather than silently serving partial company guidance.

Field Requirement
id Required stable lowercase identifier using path segments and hyphens, such as engineering/python-settings. It must be unique across the root.
title Required human-readable title, 1–200 characters.
url Required absolute HTTP or HTTPS canonical source URL.
summary Required search-oriented summary, 1–500 characters.
metadata Optional string-to-string provenance fields such as owner, authority, version, and updated. Quote YAML values that would otherwise become dates or numbers.
body Required non-empty Markdown. A document may contain at most 60,000 characters so a fetch stays bounded.

Keep identifiers stable when moving files: callers fetch by frontmatter id, not by filesystem path. Hidden directories, hidden files, and common cache directories are ignored. Symlinks that escape the configured root, duplicate identifiers, malformed YAML, unknown frontmatter fields, non-UTF-8 text, and empty bodies are rejected.

MCP reference

The server intentionally exposes tools only. That is the common denominator across coding agents; clients do not need MCP resource or prompt support.

Tool Input Structured result
search query: string (1–500 characters) {results: [{id, title, url}]} with at most 10 BM25-ranked matches.
fetch id: string from search {id, title, text, url, metadata} for one exact document.

Both tools are declared read-only, non-destructive, idempotent, and closed-world. Search is deterministic keyword retrieval over identifiers, titles, summaries, metadata, and Markdown bodies. Titles and summaries receive extra weight; an exact phrase in either receives a further boost. A query with no matching terms returns an empty results array.

The server instructions tell agents to search whenever company-specific context could help, fetch before relying on a result, preserve canonical URLs as provenance, and avoid inventing internal facts when the catalog has no answer.

Production boundary

The included process binds only to 127.0.0.1:8000 and has no built-in authentication or browser CORS policy. For company deployment, put it behind your existing identity-aware gateway or reverse proxy, terminate TLS there, and record per-tool latency, result count, fetched document id, caller, and errors there or in structured application logs. Do not log full queries or document bodies unless your privacy policy explicitly permits it.

Authentication controls who can reach a server; it is not document-level authorization. Run separate catalogs or add an authorization-aware storage adapter before mixing content with different audiences. The server is read-only and never executes, edits, or installs any served content.

Develop

uv sync --locked
uv run pytest
uv run pre-commit run --all-files
uv build --no-sources

Retrieval examples live in examples/context/, and human-readable evaluation queries live in evals/retrieval.json. The test suite checks every evaluation, strict content rejection, live root swapping, the official in-memory MCP client contract, tool annotations and schemas, and the FastAPI lifespan and health route. CI runs the suite and all repository checks on Python 3.14.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured