chore: import upstream snapshot with attribution
Deploy Docs / deploy-docs (push) Failing after 1s
Conformance Tests / client-conformance (push) Failing after 3s
Conformance Tests / server-conformance (push) Failing after 1s
GitHub Actions Security Analysis / zizmor (push) Failing after 1s
CI / checks (push) Failing after 59m20s
CI / all-green (push) Waiting to run
Deploy Docs / deploy-docs (push) Failing after 1s
Conformance Tests / client-conformance (push) Failing after 3s
Conformance Tests / server-conformance (push) Failing after 1s
GitHub Actions Security Analysis / zizmor (push) Failing after 1s
CI / checks (push) Failing after 59m20s
CI / all-green (push) Waiting to run
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
from mcp.server import MCPServer
|
||||
|
||||
mcp = MCPServer("Library")
|
||||
|
||||
|
||||
@mcp.tool()
|
||||
def search(query: str) -> str:
|
||||
"""Search the library catalog."""
|
||||
return f"3 books match {query!r}."
|
||||
|
||||
|
||||
@mcp.resource("library://hours")
|
||||
def hours() -> str:
|
||||
"""When the library is open."""
|
||||
return "Mon-Fri 09:00-17:00"
|
||||
@@ -0,0 +1,9 @@
|
||||
from mcp.server import MCPServer
|
||||
|
||||
mcp = MCPServer("Web")
|
||||
|
||||
|
||||
@mcp.tool()
|
||||
def search(query: str) -> str:
|
||||
"""Search the web."""
|
||||
return f"12 pages match {query!r}."
|
||||
@@ -0,0 +1,19 @@
|
||||
import asyncio
|
||||
|
||||
from mcp import ClientSessionGroup, StdioServerParameters
|
||||
|
||||
|
||||
async def main() -> None:
|
||||
library = StdioServerParameters(command="uv", args=["run", "mcp", "run", "library_server.py"])
|
||||
web = StdioServerParameters(command="uv", args=["run", "mcp", "run", "web_server.py"])
|
||||
|
||||
async with ClientSessionGroup() as group:
|
||||
await group.connect_to_server(library)
|
||||
await group.connect_to_server(web)
|
||||
|
||||
result = await group.call_tool("search", {"query": "model context protocol"})
|
||||
print(result.structured_content)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
@@ -0,0 +1,26 @@
|
||||
import asyncio
|
||||
|
||||
from mcp_types import Implementation
|
||||
|
||||
from mcp import ClientSessionGroup, StdioServerParameters
|
||||
|
||||
|
||||
def by_server(name: str, server_info: Implementation) -> str:
|
||||
return f"{server_info.name}.{name}"
|
||||
|
||||
|
||||
async def main() -> None:
|
||||
library = StdioServerParameters(command="uv", args=["run", "mcp", "run", "library_server.py"])
|
||||
web = StdioServerParameters(command="uv", args=["run", "mcp", "run", "web_server.py"])
|
||||
|
||||
async with ClientSessionGroup(component_name_hook=by_server) as group:
|
||||
await group.connect_to_server(library)
|
||||
await group.connect_to_server(web)
|
||||
|
||||
print(sorted(group.tools))
|
||||
result = await group.call_tool("Web.search", {"query": "model context protocol"})
|
||||
print(result.structured_content)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
Reference in New Issue
Block a user