diff options
Diffstat (limited to 'scripts/search_server.py')
| -rw-r--r-- | scripts/search_server.py | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/scripts/search_server.py b/scripts/search_server.py new file mode 100644 index 0000000..34d9c4d --- /dev/null +++ b/scripts/search_server.py @@ -0,0 +1,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) |
