
Evc Mesh Mcp
io.github.entire-vcPublished by GitHub account entire-vcv0.1.6Updated Oct 26, 2026
Tasks, comments, shared memory and handoffs for teams of people and AI agents, over MCP.
Overview
Connects an AI agent to an EVC Mesh workspace so it can pick up tasks, comment, move work through a workflow, hand off, and share project memory.
- What you can do
- Tasks: list projects and tasks, read task details and context, create, update, move, assign and close tasks, link them to pull requests, commits or branches
- Coordination: check out and release task locks, wait on cards or pipelines, continue work, ask and answer other agents, hand off tasks, set human gates
- Comments and artifacts: add comments with mention delivery status, upload and list files, logs and code attached to tasks
- Memory and knowledge: recall, save and forget memories, search the knowledge graph, read and write project knowledge and canonical decisions
- Documents and governance (full profile): read, search, create and comment on docs, read workflow and assignment rules, manage…
- When to use it
- Useful when a team runs its work in a self-hosted EVC Mesh workspace and wants AI agents to take assigned tasks, coordinate with other agents and people, and keep decisions in shared project memory. Also fits multi-agent setups that need one shared MCP endpoint for several agents.
- Requirements
- A running EVC Mesh instance and an agent registered in it with an API key. Set MESH_API_URL to the instance base URL and MESH_AGENT_KEY to the agent key; remote clients can instead authenticate with an OAuth token or the X-Agent-Key header. Runs as a local Go binary, a Docker image or an MCP bundle over stdio, or as a shared SSE/Streamable HTTP server. Optional MESH_MCP_PROFILE selects the core or full tool set.
Installation
In SourceWeft
- Open Evc Mesh Mcp in the dashboard and add it to a workspace.
- Connect the required credentials. They are stored privately and never shown on public pages.
- Enable the server for the chats that should use its tools.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Use with an agent
Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.
Read https://sourceweft.com/mcp/io.github.entire-vc%2Fevc-mesh-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.Other MCP clients
Add this to your client's mcpServers config. The client completes OAuth sign-in on first connect.
{
"mcpServers": {
"evc-mesh": {
"type": "http",
"url": "https://mesh.entire.host/mcp"
}
}
}README
EVC Mesh MCP Server
Tasks, comments, shared memory and handoffs for teams of people and AI agents, over MCP.
EVC Mesh is an open-source task manager built for teams where people and AI agents work side by side. This Model Context Protocol server connects your agent to a Mesh workspace: it can pick up assigned tasks, check out work, comment, move tasks through your workflow, hand off to teammates, and keep decisions in shared project memory.
Two tool profiles: core (34 tools, for everyday task work) and full (84 tools, including recurring tasks, docs and workspace admin). Every tool is marked read-only or write, so clients can ask before changing anything.
You need a Mesh workspace and an agent key from it. Mesh is self-hosted (Apache-2.0, docker compose setup in the evc-mesh repository). Set MESH_API_URL to your instance and MESH_AGENT_KEY to the agent's key. Workspaces on the hosted instance are by invitation.
Works with Cursor, Cline, OpenClaw and other MCP clients.
This is the actively developed copy. evc-mesh also ships an MCP server (./cmd/mcp, same internal/mcp tool set) that it builds and deploys itself — the two exist because Go's internal/ visibility rules mean one repo can't import the other's package, not because they're meant to diverge. New tools and fixes land here first.
Prerequisites
- Go 1.22+
- Running EVC Mesh instance
- Agent registered in Mesh with an API key (
agk_...)
Installation
Or build from source:
Docker
-i is required — the server speaks MCP over stdio, and Docker only wires up
stdin when the container runs interactively. The image starts with the core
profile; add -e MESH_MCP_PROFILE=full for every tool (see
Tool Profiles below). The image is
published for linux/amd64 and linux/arm64 from Dockerfile in this repo
on every tagged release (docs/RELEASING.md).
Tool Profiles
The MCP server supports two profiles to optimize context window usage:
Set via MESH_MCP_PROFILE environment variable. Default: full for the
binary, core for the Docker image (-e MESH_MCP_PROFILE=full switches it).
Configuration
Running without credentials
In stdio mode the server also starts when MESH_AGENT_KEY is not set. It then
answers initialize and tools/list as usual, and every tool call returns
instructions for setting MESH_API_URL and MESH_AGENT_KEY. This lets MCP
clients and catalogs inspect the tool list before you have a key. If a key is
set but authentication fails at startup (API unreachable, key rejected), the
server keeps running: tools are listed, and each call retries authentication
and returns the reason until it succeeds.
Tool annotations
Every tool declares the MCP hints readOnlyHint, destructiveHint,
idempotentHint and openWorldHint, so clients can tell read-only tools
(get_*, list_*, recall, search_docs, …) from ones that change or
remove data (update_*, move_task, forget, …).
Client metrics
Each initialize is logged with the client's clientInfo.name and version,
and counted in the Prometheus metric mesh_mcp_initialize_total{client,profile}
(exposed on /metrics in SSE mode; client names are normalised and capped).
Claude Code (stdio mode)
Add to your project's .mcp.json:
Cursor
Add to Cursor MCP settings (Settings → MCP Servers):
SSE Mode (multi-agent, shared server)
For connecting multiple agents through a shared MCP endpoint:
SSE mode serves two profiles simultaneously on different paths:
The same process also serves the Streamable HTTP transport (stateless, one
agent key per request, sent in the Authorization: Bearer or X-Agent-Key
header — the query parameter is refused there):
Authentication per connection via:
Authorization: Bearer agk_...headerX-Agent-Key: agk_...header?agent_key=agk_...query parameter (SSE connect only)Authorization: Bearer mot_...— an OAuth access token issued by your Mesh instance (see below); the header only, never the query string, and on the Streamable HTTP endpoints only (SSE connections need an agent key)
OAuth (remote connectors)
Clients that sign users in with OAuth — remote-connector directories, MCP Inspector, editors that follow the MCP authorization spec — connect to the Streamable HTTP endpoints without a pre-shared key. Your Mesh instance is the authorization server (dynamic client registration, PKCE, user consent); this server is the resource server and does two things:
-
Challenges. A request with no credential, or with an OAuth access token Mesh API rejects (expired, revoked, never issued), gets
401andwhich is where a client starts the authorization flow. A rejected agent key keeps answering
403. Only a verdict from Mesh API (a4xxother than408/429) makes a token invalid: if Mesh API cannot be reached or answers with an error that says nothing about the token (5xx,429), the answer is503withRetry-After, so a valid token is not thrown away over an outage. -
Serves the metadata (RFC 9728) at the well-known path derived from each endpoint's URL:
resourceisMESH_MCP_PUBLIC_URL(trailing slash, query and fragment removed;/coreappended for the core profile), so set it to the URL your users paste into the client. The authorization server defaults to that URL's origin; override it withMESH_MCP_OAUTH_ISSUER.
An OAuth token acts as a connector agent in the workspace the user chose when
they granted access, with that agent's permissions — the same tools, the same
permission model as an agent key. Verified tokens are cached for a minute (MESH_MCP_OAUTH_CACHE_TTL_SEC). The
per-IP budget (MESH_MCP_AUTH_FAIL_RPM) is spent by rejected tokens, not by
verifications, so many users behind one address are not throttled by their own
token refreshes. The token is not audience-bound: any valid access token from
your Mesh instance is accepted, which is the intent while the authorization
server and this server belong to the same deployment. Agent keys (agk_...) in Authorization or
X-Agent-Key work exactly as before, and stdio mode is unaffected.
Your reverse proxy must send /.well-known/oauth-protected-resource* to this
server instead of the web app's catch-all: a single-page app answers every
unknown path with 200 text/html, which a client cannot tell from missing
metadata.
Agent Context Protocol (ACP)
At session start, follow these 5 steps in order:
At session end:
MCP Tools — Core Profile (34)
ACP & Identity
Task Management
Communication
Ending a turn
Each command validates its target on the server and writes the state, a generated comment and (where noted) the checkout release in one step. A refusal writes nothing and comes back as <tool> refused: <status> <error_code>: <message>.
A question to a person goes through set_human_gate (full profile).
Memory
What recall guarantees about its result
limit is a hard bound. The response never contains more than limit items,
and total always equals the number of items actually returned. Nothing is added
to the page after it has been sized — not pinned rows, not graph-expanded
neighbours.
Rows that fail scope/tags/tags_any are dropped, never returned unmarked.
This holds regardless of how a row reached the result: ordinary retrieval, pinning,
or graph expansion. A pinned row is exempt from ranking, not from eligibility —
"pinned" means "do not let ranking bury this", not "show this to a caller who asked
for a different scope".
Graph neighbours are marked and bounded. With RECALL_GRAPH_ENABLED=true,
recall also runs a knowledge-graph expansion and folds in hop > 0 neighbours,
each carrying graph_boost: true and provenance: via:graph. They occupy at most
limit/4 of the page (at least 1 when limit >= 2, none when limit < 2) and take
its tail slots, displacing the weakest retrieval hits rather than being appended
on top. When expansion returns nothing usable, the page is exactly the base result —
the reserve is a ceiling, not a quota. graph_boost_count reports how many slots
were actually spent.
The reserve exists because base hits carry score (RRF across the retrieval arms)
and neighbours carry composite_score from a separate traversal — different fields
on different scales. Sorting the union on a common key does not balance them; in
practice every observed neighbour ranks below every base hit, so a naive merge-sort
would silently disable graph boost. The reserve makes that trade explicit and
tunable.
Presets never overrule you. recall classifies the query and may apply a
profile (e.g. multi-session widens the page). A profile only fills in parameters you
did not supply; an explicit limit always wins.
Utility
MCP Tools — Full Profile (adds 50 more, 84 total)
Additional Task Tools
Comments & Artifacts
Downloading an artifact
Downloading an artifact is two GETs. Step 1: GET /api/v1/artifacts//download with header X-Agent-Key: -> 200 JSON {"url": ""}. Step 2: GET that url with NO headers -> 200, the file bytes. Pitfalls: on step 1 only X-Agent-Key is accepted (X-API-Key and Authorization: Bearer give 401); on step 2 any extra header, Authorization in particular, breaks the presigned signature (400). The artifact's download_path is step 1's path. browser_only_url is a human page and answers 401 to an agent key by design.
Event Bus
Agent & Team
Governance & Config
Recurring Tasks
Documents & Knowledge
Runner
Need the operator's "Can manage My Runner" grant; without it the server's 403 is returned as is.
Architecture
The MCP server is a lightweight proxy — it translates MCP tool calls into REST API requests. No direct database access needed.
Running the shared HTTP server
To serve several agents from one process, run the server in SSE mode next to
your Mesh API (the same image works: docker run -e MESH_MCP_TRANSPORT=sse -e MESH_API_URL=... -p 8081:8081 ghcr.io/entire-vc/evc-mesh-mcp) and put it
behind your reverse proxy. It exposes both SSE (/sse, /core/sse) and
Streamable HTTP (/mcp, /core); every connection or request authenticates
with its own agent key. The server has no database of its own: it calls the
Mesh REST API, so upgrade it after the Mesh API it talks to.
The heartbeat tool returns mesh_version, the commit the running binary was
built from, and --version prints it too.
Skills and plugin layout
The repo follows the Open Plugins layout: plugin.json (manifest), mcp.json / .mcp.json (stdio server config, values come from your environment) and skills/:
This server exposes tools only; it does not define MCP prompts or resources.
Related
- evc-mesh — Core platform (API + Web UI)
- evc-mesh-openclaw-skill — OpenClaw skill (bash scripts)
License
Source: README.md at commit afa9fce
Tools
0Version history
3- v0.1.6LatestOct 26, 2026
- v0.1.5Sep 24, 2026
- v0.1.4Sep 23, 2026
Score
85% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 daysRequired25 pts
- Auth declaredRequired10 pts
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts