v1.15.0 — MCP v2 surfaces + agent dashboard editing & live-update fix
MCP overhaul from the tool-design audit (docs/mcp_audit/): the /v1/mcp tool
surface was reviewed against MCP/Anthropic best practices, made consistent and
safer, and a new set of purpose-scoped surfaces (/v2/mcp/<role>) was added so
agents load only the tools that fit their job. /v1/mcp is unchanged and frozen
for existing consumers.
Added
- v2 purpose-scoped MCP surfaces —
POST /v2/mcp/{appdev|agent|service|admin},
each exposing only the tools relevant to that role (a projection of the same
canonical catalog — no forked handlers).agent~45 tools,appdev~20,
service~52,admin~15, vs ~100 on the full surface. Fewer, focused tools
= less context and fewer wrong-tool mistakes. The same surfaces are available
locally viaaimeat connect serve --surface <role>. - Per-agent scope enforcement on MCP (F1) — the tool surface is now filtered
by the agent's granted scopes (mirroring the RESTrequireScopegates), so an
agent no longer sees/uses tools it isn't scoped for.AIMEAT_MCP_ENFORCE_SCOPES
(default true) toggles a warn-only rollout. Owner-attached agents with a*
scope still get the full surface. response_format(concise|detailed) on read-heavy tools — concise
returns only high-signal fields for fewer tokens.structuredContent+outputSchemaon core read tools (memory read/list,
wallet, work inbox, agents list, agent profile) — machine-readable output
alongside the text content.- Binary download handle —
aimeat_storage_downloadreturns aresource_link- a presigned, TTL-limited
GET /v1/download/:tokenURL instead of base64, so
binaries never flow through the model context.inline:trueonly for small text.
- a presigned, TTL-limited
- Output-size backstop — tool results are bounded (~25k tokens) to protect the
context window;aimeat_memory_listgained alimit+ capped owner-scope. - Per-role operating handbooks — separate handbook per surface, fetchable via
aimeat_handbook_get(surface:"<role>")orGET /v1/agents/me/handbook/surface/:role. aimeat_message_historytool (full thread context, oldest-first).- Tool-surface tooling —
pnpm audit:mcp-schemas(server↔connector↔catalog
schema-parity audit with a--strictdrift ratchet + v2 surface coverage) and
pnpm eval:mcp-surface(context-cost report). - Editable Stored Memory Keys in the agent Data Access tab — inline value
editor, delete, and + Add key. New entries are created under the agent's
GAII (not the owner's GHII) via a newagentparameter onPOST /v1/memory,
so they belong to the agent being viewed. Rows now show per-key created /
last-updated timestamps and a sort control (updated/created, newest/oldest). - Editable agent Memory Areas (key prefix / description / read vs read+write)
with delete, in the Data Access tab. - Drag-to-reorder agent bars in the profile Agents tab — per-browser order
saved tolocalStorage(ungrouped, unfiltered list). - Pop-out agent window — a ⤢ button opens a single agent in its own window
(/v1/profile?solo=<name>) so several agents can sit side by side; each window
keeps its own SSE connection. - Editable array config in the admin dashboard — array-of-strings fields such
asagent.system_principles(the system-wide directive principles) are now
edited one-item-per-line in the Config tab and persisted viaPUT /v1/admin/config. - Task deliverable link — agents may pass
deliverable_keyon
POST .../tasks/{id}/complete; it is stored on the task (deliverableKey, both
backends) and the owner's Tasks tab links to that agent-memory entry, showing
the value on demand or "no longer exists" if it was deleted.
Changed
- Canonical tool catalog (
src/mcp/catalog/) is now the single source for tool
descriptions on both MCP surfaces (was: inline strings duplicated per surface).
Descriptions rewritten to "new teammate" quality. - Reconciled server↔connector input schemas — 43 tools whose two surfaces
disagreed on parameter names now match the REST contract (e.g.consent_grant,
group_get,catalogue_*); fixed a connectorstorage_uploadbug (sent
content, REST readsdata). Remaining known divergences are tracked/baselined. - MCP audit + CLI guidance —
aimeat help/aimeat connectand the bootstrap
GET /discovery doc now document the v2 surfaces. DELETE /v1/memory/:keymirrors the PUT owner-session cross-agent lookup —
an owner can now delete a key stored under one of their agents (previously 404).PUT /v1/agents/:name/directivesnow merges instead of full-replacing —
fields omitted from the request body are preserved, so the Directives and Data
Access tabs no longer wipe each other's sections.- Collapsed agent bar is now two rows (identity/badges on top, a faint-divider
second line for delivery/status/last-seen) so the status text stops overflowing.
Fixed
-
SSE live updates were globally broken. The global
compression()middleware
buffered theGET /v1/eventsstream, so change events never reached the browser —
the UI only appeared to refresh via polling (the Memory tab, agent task event log,
and 13 other tabs all stayed stale until reload).text/event-streamis now
excluded from compression and the stream is flushed per event; live updates work
again everywhere. -
Behavioral directives silently vanished on save. The Directives tab sent a
contentfield the API/storage doesn't have (so it was stripped); behavioral
directives are now stored as the agent-levelrulesand reconstructed on load. -
Admin Config fields looked un-editable. Inputs were bound to the saved value
instead of the pending edit, so toggling a checkbox / typing snapped straight
back on re-render. All inputs now reflectpending[path]. -
Stale agent handbook guidance: removed a phantom
aimeat_memory_deletetool
reference, corrected the "18 built-in tools" wording, and added a missing
aimeat_message_historytool annotation that was breaking MCP registration.
Removed
aimeat_instance_*tools are not exposed on the v2 surfaces (auto-created
session metadata, not an agent capability). They remain on/v1/mcp.