blob: 34d9c4d66875437cdb6b83ac5bbaa58df3f00ed0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
"""Test MCP server providing a small searchable document index.
Usage:
python scripts/search_server.py # stdio transport
python scripts/search_server.py streamable-http # HTTP transport
"""
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("search")
_DOCS: dict[str, str] = {
"python": "Python is a high-level programming language.",
"mcp": "Model Context Protocol enables tool interoperability.",
"ollama": "Ollama runs large language models locally.",
"starlette": "Starlette is a lightweight ASGI framework.",
}
@mcp.tool()
def search_documents(query: str) -> list[dict[str, str]]:
"""Search the document index by keyword.
Returns a list of documents with 'title' and 'snippet' keys.
"""
results = []
query_lower = query.lower()
for title, body in _DOCS.items():
if query_lower in title.lower() or query_lower in body.lower():
results.append({"title": title, "snippet": body})
return results
@mcp.tool()
def get_document(title: str) -> str:
"""Return the full body of a document by title."""
return _DOCS.get(title.lower(), f"document '{title}' not found")
if __name__ == "__main__":
import sys
transport = sys.argv[1] if len(sys.argv) > 1 else "stdio"
port = int(sys.argv[2]) if len(sys.argv) > 2 else 9000
mcp.settings.port = port
mcp.run(transport=transport)
|