eventOS over MCP
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@eventOS over MCPCheck attendee_1's schedule for conflicts."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
eventOS over WebMCP
WebMCP Challenge submission. A live event-operations platform that publishes
six of its operations as WebMCP tools on document.modelContext, callable by
any agent driving the browser — no API key, no OAuth grant, no server the agent
has to be told about. Three of the six are backed by a real five-agent
eventOS Agent Fleet reachable over conventional MCP.
Live WebMCP page | |
WebMCP surface |
|
MCP console |
|
MCP endpoint |
|
Transport (server MCP) | Streamable HTTP, JSON-RPC 2.0 |
License |
The WebMCP layer
WebMCP inverts the usual integration. Instead of an agent being configured with a
server, credentials and a tool catalogue, the page it is already looking at
tells it what it can do. web/lib/webmcp.ts registers six tools during load;
an agent driving the tab discovers them immediately and calls them in the user's
own authenticated session.
Tool | Input | Returns | Backing |
|
| Positive / neutral / negative signal counts, sentiment score, ranked themes | live fleet |
| — | Every upcoming event with dates, venue, attendee and exhibitor counts, status | live fleet + catalog |
|
| Revenue and cost lines, gross profit, margin, per-line budget variance, largest overruns | catalog |
|
| Vendors checked in and on track, SLA-flagged by status and type, pending exhibitor approvals | live fleet |
|
| venueSource registry record — halls, floor area, capacity, docks, power, wi-fi, contact, caveats | catalog |
|
| Ranked planner profiles matched on name, agency, city, title, specialty and language | catalog |
Every result carries a source field — live:eventos-agent-fleet,
venueSource or catalog — so an agent can tell a number measured by the live
fleet from one produced by a model. The three live tools open one MCP session
against the fleet and reuse it; get_event_sentiment scores operational
sentiment from real KPIs (meeting confirmation rate, exhibitor readiness, vendor
SLA state) and says so in a method field rather than passing derived signal off
as survey data.
Tools return the spec's CallToolResult shape — a content block for the model
plus structuredContent for hosts that read it. Failures come back as a normal
result with isError: true and a hint, not a thrown exception, so an agent can
recover instead of dead-ending.
Registering
document.modelContext.registerTool({
name: "check_vendor_status",
description: "Vendor readiness for an eventOS event …",
inputSchema: { type: "object", properties: { event_id: { type: "string", … } }, required: ["event_id"] },
execute: async ({ event_id }) => ({ content: [{ type: "text", text: … }], structuredContent: … }),
});The API is young and still moving: Chrome 146 shipped it on
navigator.modelContext, the W3C explainer writes it as
document.modelContext, and earlier drafts used window.agent.
web/lib/webmcp.ts registers against every surface that exists, so the page
works in an agentic browser today and in the standardised one later without a
code change. Surfaces are deduplicated by object identity — a browser that
aliases one object onto both document and navigator would otherwise get two
registration passes and throw on every duplicate tool name.
All six tools are declared annotations: { readOnlyHint: true }. None of them
book, cancel, send or charge anything, and saying so lets a host call them
without a confirmation prompt.
Two cases the spec does not cover, both of which decide whether this works when someone opens the page cold:
The host attaches after we do. There is no event for a
modelContextappearing, and an agentic browser may inject it well after React has mounted. The page watches for one for 60 seconds after load — polling twice a second, plus onvisibilitychangeandfocus— and registers into it the moment it shows up, updating the badge in the header. Registration is not a single shot at mount.No host at all — a plain browser, or a judge opening the page in Safari. A minimal same-shape shim goes on
document.modelContextso the page's own runner still works and a polyfill or headless harness has somewhere to look. The shim is branded, so the detector never mistakes our own stand-in for a real host: the page reportsnative: falseand says "no WebMCP host — shim active" rather than claiming support it does not have.
Verifying
Open the live page and check the console:
window.__eventosWebMCP
// { registered: ["get_event_sentiment", "list_events", "get_event_pnl",
// "check_vendor_status", "get_venue_info", "search_planners"],
// surfaces: ["document.modelContext"], native: true, errors: [] }
await window.__eventosWebMCP.call("check_vendor_status", { event_id: "EVT-IMEX-26" })Or ask an agent driving the tab: "What tools does this page offer? Check vendor status for IMEX and tell me what's at risk."
Files
Path | Role |
| The six tool descriptors — schemas and |
| Surface detection, shim, registration, |
| Client component mounted in the root layout; registers on mount |
| Event catalog, venueSource registry, planner directory, P&L model |
| Landing page — live registration state and an inline runner for every tool |
Related MCP server: campaign_chest
The fleet underneath
The event fleet already existed: five Google ADK agents that detect scheduling conflicts, route attendee notifications, brief executives, chase vendor SLAs and enforce GDPR — running on Cloud Run for IMEX America, October 12–15 2026.
Their capabilities were already plain Python functions. api/mcp_server.py is a
protocol skin over those functions: no agent logic is reimplemented. That is
the point. An MCP server is not a rewrite — it is a way to let any model in any
client drive software you already shipped.
The fleet's MCP tools
Tool | Agent | Does |
| BookingAgent | Overlapping meetings for an attendee cohort |
| BookingAgent | Book into next free slot, or move an existing meeting |
| BookingAgent | An exhibitor's full schedule |
| InsightAgent | Executive briefing with KPIs and recommendations |
| InsightAgent | Booths not yet confirmed, by region |
| CommsAgent | Deliver on the attendee's preferred channel |
| CommsAgent | Hand off with a 15-minute response SLA |
| CommsAgent | Delivery records for an attendee |
| VendorAgent | Vendors at risk of, or in, SLA breach |
| ComplianceAgent | Redact PII, return a cited compliance verdict |
| Registry | Every agent with status, tools and health score |
| Fleet Architect | Live LLM call — designs a bespoke fleet for an event profile |
fleet_architect_design is the one that is not a lookup: it calls Gemini and
returns a freshly designed agent roster. Budget 15–30 seconds.
Try it
Discover the tools:
curl -sX POST https://eventos-agent-fleet-502476192372.us-central1.run.app/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | jq '.result.tools[].name'Call one:
curl -sX POST https://eventos-agent-fleet-502476192372.us-central1.run.app/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{
"name":"bookingagent_detect_conflicts",
"arguments":{"attendee_id":"attendee_1"}}}' | jq '.result.content[0].text'Full handshake, the way a real client opens a session:
curl -sX POST .../mcp -H "Content-Type: application/json" -H "Accept: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{
"protocolVersion":"2025-11-25","capabilities":{},
"clientInfo":{"name":"my-client","version":"1.0"}}}'Protocol surface
Method | Behaviour |
| Negotiates protocol version, returns |
|
|
| All 12 tools with JSON Schema |
| Returns |
| Empty result |
HTTP | Behaviour |
| JSON-RPC request → JSON response, or SSE framing when the client accepts only |
| Server-initiated SSE stream (bounded keepalive) |
| Session termination → |
| Plain-REST tool catalogue for browser clients |
Errors use JSON-RPC codes: -32700 parse, -32600 invalid request, -32601
method not found, -32602 invalid params. Arguments are validated against each
tool's inputSchema — types, enums and required fields — so a malformed call
returns -32602 rather than a 500. Failures inside a tool come back as
isError: true in the result, so the calling model can see and react to them.
Sessions are issued on initialize but not enforced, keeping the endpoint usable
from stateless clients such as curl and browser fetch.
The MCP console
web/console is a genuine MCP client, not a REST wrapper. On
load it runs initialize, discovers tools with tools/list, and renders an
argument form generated from each tool's JSON Schema. Every button issues a real
tools/call.
web/lib/mcp.ts is a standalone client — JSON-RPC framing, version negotiation,
session headers, SSE-or-JSON response parsing, typed errors. It has no
dependency on this app and can be lifted into any TypeScript project.
Every message the page exchanges with the fleet is recorded and shown in a
JSON-RPC wire log at the bottom of the console: method, latency, and the
raw request and response envelopes, expandable per exchange. Loading the page
and calling one tool produces the whole MCP lifecycle — initialize,
notifications/initialized (answered 202, no body), tools/list,
tools/call — so the protocol is inspectable rather than merely claimed.
web/app/api/mcp/route.ts proxies to Cloud Run so the browser stays same-origin
and the upstream URL stays in server config. The fleet also sets permissive CORS
and exposes Mcp-Session-Id, so pointing the client straight at the Cloud Run
URL works too.
Deployed at https://eventos-mcp.vercel.app/console. To run the whole
web/ app locally:
cd web
npm install
npm run dev # http://localhost:3000 — WebMCP page and /consoleSet CLOUD_RUN_URL to point at a different fleet.
Conformance
tests/mcp_conformance.py exercises the protocol end to end — handshake and
version negotiation, discovery, all 12 tools, every JSON-RPC error code, SSE
framing, CORS exposure, and session teardown.
python3 tests/mcp_conformance.py https://eventos-agent-fleet-502476192372.us-central1.run.app42 checks, all passing against the deployed service.
Stack
Python 3.12 · FastAPI · Google ADK · Gemini · Cloud Run · Next.js 16 · React 19 ·
TypeScript · Vercel · WebMCP (document.modelContext)
License
MIT © 2026 studio0x
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Your org's AI agents, tasks, runs, search, and brain files as MCP tools and resources.
Agent-native collaboration network: orchestrate a team of long-running agents from any MCP client.
One MCP endpoint for Claude, GPT & Gemini: 100+ tools + no-code connectors + agent workers.
Operator-as-agent MCP hub. 6 tools. First $5 free, then $0.001/call.
Related MCP Servers
- AlicenseAqualityAmaintenanceAn MCP orchestration layer that aggregates multiple MCP servers while exposing only 8 meta-tools, dramatically reducing context window usage, and provides SLOP scripting, event monitoring, and tool customization.10MIT
- FlicenseNot gradedqualityDmaintenanceProvides 35 MCP tools for automated marketing campaigns, integrating event management, booking, and email marketing into a deterministic pipeline for AI agents.
- AlicenseNot gradedqualityBmaintenanceProvides MCP tools for operations desk tasks including calendar availability, customer lookup, quote calculation, and notification sending. Includes an internal agentic orchestrator that consumes the same MCP tools via protocol.MIT
- AlicenseNot gradedqualityCmaintenanceRemote MCP server for the fleetstreet creator platform, enabling AI agents to register creative works, issue/revoke AI licences, access compliance evidence, and manage a creator business (catalog, merch, events) via 46 tools.14Unlicense - libtelnet variant
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/thebobby0x/webmcp-challenge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server