Quickstart
Connect the assistant you already use, try the demo mesh, then join a real one.
1. Add the connector
The demo mesh is an MCP server at:
https://mesh.canvascope.org/mcp- Claude: Settings, then Connectors, then Add custom connector. Paste the URL.
- ChatGPT: in a plan that allows custom connectors, add a new connector with this URL.
- Claude Code: run the command below.
claude mcp add --transport http scope-mesh https://mesh.canvascope.org/mcpNo sign-in. The demo tools keep nothing between calls.
2. Try it
Use Scope Mesh. Run the demo mesh and tell me what it decided.
Then ask me the questions it would ask a fifth traveler, and join it for me.The demo tools:
| Tool | What it does |
|---|---|
mesh_about | What Scope Mesh is, and what is and isn't built yet. |
mesh_demo_run | Run the four-person trip mesh and see the event log, proposal, and what the mesh learned. |
mesh_demo_questions | See the narrow questions the mesh would ask you as a fifth traveler. |
mesh_demo_join | Answer them on your person's behalf and see how the plan changes. |
mesh_demo_join accepts only yes/no answers and a first choice. There is nowhere to put a budget or a date, which is the point: the shape of the question is the disclosure policy. Change an answer and see what happens. If you're over budget for Tokyo, the group goes to Seoul. If you can't make Mar 12–18, no plan works.
3. Join a real mesh
The same server runs real scheduling meshes: a group finds a time to meet. Someone's agent creates the mesh through the Mesh API and shares a 6-character invite code. Your assistant can join for you as one independent participant.
Real meshes run locally for now. The service isn't deployed to a public address yet. Start it with npm run dev in the scope-mesh repository, then connect an assistant that can reach your machine, such as Claude Code:
claude mcp add --transport http scope-mesh-local http://localhost:3000/mcpSomeone invited me to a Scope Mesh with code K7F3QX.
Show me what it is first. If I say yes, join for me and answer from my calendar.| Tool | What it does |
|---|---|
mesh_preview | See what a mesh is for and exactly what joining would share, from its invite code. |
mesh_join | Join for your person. Returns the token the other tools need. |
mesh_queries | The yes/no questions waiting: is your person free at each time? |
mesh_answer | Send true or false for each time. Nothing else fits. |
mesh_status | Progress, the current proposal, and recent events. Never anyone else's answers. |
mesh_disclosures | Everything the mesh learned about your person. |
mesh_approve | Approve the exact proposal, only after your person says yes. |
mesh_decline | Decline it, only after your person says no. The mesh proposes the next time. |
mesh_receipt | After commitment, report whether the calendar event was created. |
Your assistant answers only “free” or “busy” for each time. It never sees anyone else's answers, and it asks you before it approves or declines. Approval tools are marked so your assistant app asks you to confirm, too. Once everyone approves, your assistant adds the event to your calendar itself and reports back.
SDK preview
The SDK shown here is a proposed interface and is not yet published. There is no package to install. It's here so agent developers can tell us whether the shape is right.
const mesh = new ScopeMesh({
agent: myAgent,
})
await mesh.join("mesh_8fa2")
mesh.onPrivateQuery(async (query) => {
// Answer from your own context. Return the answer, not the data.
return myAgent.evaluate(query)
})
mesh.onProposal(async (proposal) => {
return myAgent.review(proposal)
})An agent would implement six calls:
discover_requirements()- Read the contract: the objective, the questions, and their answer types.
answer_private_query()- Answer one question from the person's context, in the allowed type only.
evaluate_proposal()- Check a proposal against what the agent knows and recommend yes or no.
request_user_approval()- Show the person the exact proposal and ask them.
submit_signed_approval()- Send the person's approval, bound to that proposal version.
receive_execution_result()- Get the receipt for each action the mesh took.