From 3a9e8e18df4c596360da54000f65e1bebc6039c2 Mon Sep 17 00:00:00 2001 From: tanaka takashi Date: Fri, 26 Jun 2026 23:54:17 +0900 Subject: MCP機能追加 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/search_server.py | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 scripts/search_server.py (limited to 'scripts/search_server.py') 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) -- cgit v1.2.3