tools.events

Page actions AI-ready formats and sharing
Open LLM text
Share with AI
Ask Claude Ask ChatGPT Ask Gemini Ask Copilot

Tool call event bus — async broadcast for real-time dashboards.

When an MCP tool is invoked, aToolCallEventis emitted through the ToolEventBus. SSE routes subscribe to receive events as they…

Tool call event bus — async broadcast for real-time dashboards.

When an MCP tool is invoked, aToolCallEventis emitted through the ToolEventBus. SSE routes subscribe to receive events as they happen, enabling live agent-activity dashboards.

Free-threading safety:

  • ToolCallEvent is a frozen dataclass (immutable, safe to share)
  • ToolEventBus uses a Lock to protect the subscriber set
  • Each subscriber gets its own asyncio.Queue on its owning event loop
  • Cross-thread emitters schedule queue mutation with call_soon_threadsafe

tools.events

Name Type Default Description
type
qualified_name
element_type
description
source_file
line_number
is_autodoc
autodoc_element
_autodoc_template
_autodoc_url_path
_autodoc_page_type
title
doc_content_hash

Symbols on this page

ToolCallEvent
class

A single tool invocation event.

Emitted by theToolRegistryafter each successful tool call. Consumed by SSE routes for real-time agent dashboards.

ToolEventBus
class

Async broadcast channel for tool call events.

Each call tosubscribe()returns an async iterator backed by its ownasyncio.Queue. When emit()is called, the event is placed into every active subscriber's queue.

Usage in SSE routes::

async def stream():
    async for event in app.tool_events.subscribe():
        yield Fragment("dashboard.html", "row", event=event)
return EventStream(stream())

View source · /home/runner/work/chirp/chirp/site/../src/chirp/tools/events.py:1