Inspiration
What it does
How we built it
Challenges we ran into
Accomplishments that we're proud of
What we learned
What's next for Co-Desk — Human + Agent Support Operations
The idea
Co-Desk is a human + agent support desk: a single live ticket queue that a person and an AI agent operate together, in real time, over WebMCP.
Why WebMCP
Before WebMCP, an agent helping with a real web workflow could only navigate the page and click — slow, brittle, and hard to verify. Co-Desk inverts this: instead of the agent guessing at our UI, the site declares its own operations as structured tools the agent can call. A person opens the app and works; an agent discovers those tools and acts inside the real workflow.
What people and agents can do together now
A support team can hand the agent the whole routine workload — opening requests, adding notes, routing to teams, escalating, resolving the mechanical cases — while the human watches the same screen update live and owns the judgment calls. One shared queue, two operators, with the human always in the loop. That is the collaboration WebMCP makes possible.
How we built it
- 10 WebMCP tools (
listOpenTickets,getTicket,createTicket,addNote,updateStatus,assignToTeam,escalateTicket,resolveTicket,searchTickets,summarizeQueue), each with a JSON Schema and real effects on a shared store. - Every action — human or agent — is written to one
localStoragestore and rendered live, so the queue and an activity feed update on screen. - Plain HTML/CSS/JS, no build step — trivially deployable.
Registration is done against document.modelContext:
await document.modelContext.registerTool({
name: "resolveTicket",
description: "Resolve a ticket with a short resolution summary.",
inputSchema: {
type: "object",
properties: {
ticketId: { type: "string" },
resolution: { type: "string" },
},
required: ["ticketId", "resolution"],
},
execute: async (input) => { /* real action on the shared queue */ },
});
Challenges
The hardest part was keeping one source of truth. Tools and the human UI both mutate the same queue, so we made them share one store and one change-notification path. That guarantees an agent's action and a human click are never out of sync.
Try it
Open the live URL in ChatGPT's in-app browser or Chrome with WebMCP enabled, then ask the agent: "Summarize the queue, then handle the password-reset ticket — add a note, route it to account, and show me before resolving."
Built With
- agent
- chrome
- css
- html
- human-in-the-loop
- javascript
- localstorage
- web-api
- webmcp
Log in or sign up for Devpost to join the conversation.