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) Has been cancelled
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) Has been cancelled
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
import trio
|
||||
|
||||
from mcp import Client
|
||||
from mcp.client.subscriptions import Subscription
|
||||
|
||||
from .tutorial003 import BOARD, read_board
|
||||
|
||||
|
||||
async def watch(client: Client, sub: Subscription) -> None:
|
||||
async for _event in sub:
|
||||
board = await read_board(client)
|
||||
print(board)
|
||||
if "[ ]" not in board:
|
||||
return # sprint finished: the stream closes when run_sprint leaves the block
|
||||
|
||||
|
||||
async def run_sprint(client: Client) -> None:
|
||||
async with client.listen(resource_subscriptions=[BOARD]) as sub:
|
||||
print(await read_board(client)) # snapshot: acknowledged, so nothing after this is missed
|
||||
async with trio.open_nursery() as nursery:
|
||||
nursery.start_soon(watch, client, sub)
|
||||
for task in ("design", "build", "ship"):
|
||||
await client.call_tool("complete_task", {"board": "sprint", "task": task})
|
||||
|
||||
|
||||
async def main() -> None:
|
||||
async with Client("http://localhost:8000/mcp") as client:
|
||||
await run_sprint(client)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
trio.run(main)
|
||||
Reference in New Issue
Block a user