Public leaderboard

Public assessment

contextium-io/contextium-mcp-server (@contextium/mcp-server)

contextium-mcp-server · v0.1.0 · scanned

What changed in the harness

Selection accuracy 95→98, token cost up 11%, unconfirmed writes 0%→0%.

Category breakdown

Where the score comes from.

Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.

01Safety

0.0 / 30

0.0 out of 30
02Legibility

17.3 / 30

17.3 out of 30
03Economics

8.7 / 20

8.7 out of 20
04Discoverability

11.5 / 20

11.5 out of 20

Highest-impact fix

Estimated gain +30 points

Add explicit identity and permission preflight tools

Expose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.

Description evidence

Defects and rewrites.

51 defects found across the exposed tool descriptions. Suggested rewrites make purpose, inputs, boundaries, and returns easier for an agent to understand.

Tool Defect types Suggested rewrite
get
params_unexplained no_return_description
Fetch the full record of one resource by ID, chosen by `type`: for file, agent, skill, workflow, library, or tag this returns the complete object (file supports includeMetadata and includeLinks to also return the file's resolved outgoing // links; library_structure supports includeArchived). file_versions returns prior versions; file_by_path resolves a file by title/path via `query`; file_links returns the file's outgoing links plus backlinks (direction forward|backward|both, default both); linked_mentions returns backlinks with content excerpts; link_suggestions returns files to link to by `query` name search (scope project|workspace, default workspace); workspace_activity returns recent activity logs (filter with limit 1-200 default 50, userId, entityType, action, month, year, offset); activity_archive returns one month's archived logs (id=YYYY-MM, page default 1 at 100 rows/page); list_activity_archives returns which archive months exist; entity_activity returns a specific entity's recent activity (id=entityId, entityType required); workflow_activity returns changes since the workflow's last load (id=workflowId); member_profile returns a member's activity stats and recent actions (id=userId); workflow_members returns who a private workflow was explicitly shared with (id=workflowId). Uses your active workspace when workspaceId is omitted.
create
params_unexplained
Create a new resource in a workspace, in your active workspace when workspaceId is omitted. Set `type` to what you're creating: "file" (needs libraryId + title + complete content), "library" (a context library — needs name), or "agent" / "skill" / "workflow" (need name; a workflow can bundle projectIds, agentIds, skillIds, and tagIds). Always provide full, real content for files — never empty or placeholder. File linking: to link to another file in the SAME workspace, put //<fileId> inline in the content — use the target file's UUID (from search/list/get results), not its title. The link renders as the target's title and is indexed automatically on save; the target gains a backlink with no extra step. Add a link only where the text genuinely references an existing file; never invent //<id> for a file that does not exist (it becomes a dangling link). Use get({ type: "file_links", id }) to inspect a file's links and backlinks.
update
params_unexplained
Update an existing resource in place by ID — edit a file's title, path, content, or status, or rename/reconfigure an agent, skill, workflow, or project. Only the fields you pass are changed; for files, a new version is created automatically so history is preserved (set createVersion=false to skip creating a version entry, and changeSummary to record a short note with the new version). Set `type` to the resource kind and `id` to its UUID (from list/search/get). For files: folderId moves the file into a specific folder, projectId moves it to a different library, and status accepts active|archived. workspaceId selects the workspace — when omitted, your active workspace is used. File linking (type=file): to link to another file in the SAME workspace, put //<fileId> inline in the content — use the target's UUID (from search/list/get results), not its title. The link renders as the target's title and is re-indexed on save; backlinks are automatic. To add a backlink to file B, add //<B-id> to this file's content. Remove a link by deleting its //<id> token. Only link to files that exist. Use get({ type: "file_links", id }) to inspect links and backlinks.
delete
name_restates_behavior no_return_description
Remove a file, skill, or workflow from the workspace by its UUID: the resource is moved to trash and can be restored, not permanently destroyed. `type` selects the resource kind (file | skill | workflow); for workflows, pass workspaceId — when omitted, your default workspace is used. Returns confirmation that the deletion was recorded and the resource is now in trash.
search
params_unexplained
Find files in a workspace when you don't know their exact ID. Pick a `mode`: "text" runs a full-text search over file contents and titles; "tags" returns files carrying ALL of the given tagIds (AND logic); "files" matches by partial file name/title. Reach for search before `get` when you only know roughly what you want; use `list` with type=files instead when you just need everything in a library. Optionally narrow to one library with libraryId; limit caps the number of results returned and offset is the starting index for pagination. Returns the matching files. Searches your active workspace when workspaceId is omitted.
load_workflow
name_restates_behavior params_unexplained no_return_description
Load everything needed to run a workflow session — its agents, skills, files, and libraries — with full file content by default (set includeFileContent=false to get them without content). Call this to initialise (or resume) a full workflow session so you have complete context before acting. workflowId identifies the workflow to load (required); workspaceId selects the workspace and defaults to your active one when omitted. Returns the assembled workflow context (agents, skills, files, libraries).
manage_relationship
params_unexplained no_return_description
Manage relationships between resources: add/remove skills on agents (agent_skill), add/remove inline tags on files (tag), and share/unshare a private workflow with an individual workspace member (workflow_member). For type=tag this EDITS THE FILE CONTENT — it writes (or deletes) a #<value> token in the file body, which is the source of truth for a file's tags; the tag is auto-created if new (equivalent to updating the file content yourself). For type=workflow_member, add is an upsert (re-adding an existing member updates their role: viewer|editor, default viewer). Use fileId for a single file with action=add/remove, or fileIds (max 100) with apply_bulk/remove_bulk to tag many files at once. workspaceId selects the workspace (defaults to your active one). Returns the updated relationship state, e.g. the tags written to files or the resolved member list.
marketplace
no_return_description
Browse, inspect, and install shared skills, agents, and MCP servers from the Contextium Marketplace. Set `action`: "search" returns matching listings, optionally filtered by itemType skill/agent/mcp_server, category, or query; "get" returns a listing's full details by slug; "install" adds a listing to a workspace by slug (workspaceId = target workspace) and returns the installed item. Typically search first to find a slug, then get or install with it.
project
params_unexplained no_return_description
DEPRECATED — phases are now DB-backed. Use list_phases (replaces get_next_phase), update_phase_status(phaseId, "done") (replaces mark_phase_complete), and load_workflow (replaces load_session/close_session). If you must use the legacy file-based harness: action=get_next_phase returns the oldest pending phase FILE for the workflow; mark_phase_complete re-tags the phase file status:pending → status:passing and archives it (requires phaseFileId); close_session tags a session log as closed (requires sessionLogFileId); load_session returns full project state. workflowId selects the workflow (required); workspaceId uses your default workspace when omitted.
figma_sync
no_return_description
Manage Figma connector integrations. action=list returns all connected Figma files with their sync status; action=sync triggers a full sync for a specific connection (integrationId, obtained from action=list) and returns the result — design tokens, components, and page structure pulled into your Contextium libraries. workspaceId selects the workspace (uses default if omitted).
resume_project
no_return_description
Resume a Contextium project from a session handoff — loads the project plan, finds the last handoff note, and returns a briefing (plan plus handoff) so you can continue without losing context. Call this when the user says things like: "resume my project", "continue where I left off", "pick up from last session", "what was I working on", "I'm back let's continue", "carry on from yesterday", "what's next in my project". workflowId is the workflow to resume — omit to auto-select when only one workflow exists. workspaceId selects the workspace (uses default if omitted).
contextium_help
no_return_description
Return an overview of all available Contextium capabilities and how to use them, so you can pick the right tool for the user's request. Call this when the user asks: "what can Contextium do", "help with Contextium", "how do I use Contextium", "what Contextium tools are available", "show me what I can do with Contextium".
contextium_status
no_return_description
Return a Contextium workspace health dashboard — the available workspaces, libraries, agents, skills, and workflows (names and counts) — so you can see what exists and what is missing. Call this when the user asks: "check Contextium status", "what workspace am I in", "what resources do I have in Contextium", "show my Contextium setup", "what libraries do I have". workspaceId selects the workspace (uses default if omitted).
create_resource
no_return_description
Interactively create an agent, skill, or workflow in the current Contextium workspace, guiding the user through what is needed, returning the created resource once complete. Call this when the user says things like: "create an agent", "make a new agent", "create a skill", "build a workflow", "I need a skill for X", "set up an agent that does X", "make an agent that can do X".
manual_project_setup
no_return_description
Guided, interactive project setup — walks the user through creating a Contextium workspace step by step, asking for confirmation at each stage, returning the resulting workspace configuration once finished. Use when the user is present and wants to work through the setup together. workspaceId selects the workspace (uses default if omitted).
auto_project_setup
no_return_description
Autonomous one-shot project setup — creates a full Contextium workspace (library, agents, workflow, project-state.md) without asking any questions and returns what was created (workspace/library/workflow identifiers). Use when the user says "just set it up", "create a project for X", or is on mobile/voice. name is the project name (required); description is what the project is about and tailors agent system prompts; workspaceId uses the default workspace if omitted.
manual_research_setup
no_return_description
Guided, interactive research workspace setup — walks the user through creating a research workspace step by step, returning the resulting configuration once complete. Use when the user is present and wants to steer the research direction. workspaceId selects the workspace (uses default if omitted).
auto_research_setup
no_return_description
Autonomous one-shot research workspace setup — creates a research library, agents, and workflow without asking any questions and returns what was created. Use when the user says "deep dive into X", "research X for me", or is on mobile/voice. name is the research topic (required); description is what to research and tailors agent system prompts and the brief; depth is quick (one research agent + summary doc) or deep (Research Lead + Fact Checker + structured brief), default quick; workspaceId uses the default workspace if omitted.
capture_idea
no_return_description
Capture a quick note or seed to remember later — saves it into an existing project's seeds or a general Quick Notes library and returns confirmation of where it was saved. Use ONLY for lightweight "remember this" notes: when the user says "remember this", "note that", "jot this down", or "add this to [project]". Do NOT use this for a brand-new business, product, app, SaaS, or venture idea ("I have an idea for…", "I want to start a business that…", "I want to build…") — those are not quick notes; route them to idea_kickoff, which runs a full business analysis. When unsure between capturing and kicking off a venture idea, prefer idea_kickoff. text is the note (required); projectName optionally attaches it to a project; workspaceId uses the default workspace if omitted.
record_lesson
no_return_description
Record a lesson learned — something that went wrong and how it was fixed — into the workspace Lessons Learned library so the same mistake can be avoided on THIS and any OTHER project, returning confirmation with the generated #project-<slug> tag. Call this when you hit and resolve a non-obvious bug, a broken assumption, a footgun, or a fix that took real effort to find. Do NOT use it for routine notes or ideas (use capture_idea) or for reusable reference knowledge (use create_skill). Pass `project` so the lesson can be filtered back to its origin; omit it only for genuinely global lessons. workspaceId defaults to your active workspace.
list_lessons
no_return_description
Read lessons learned previously recorded in this workspace — including ones captured while working on OTHER projects — and return them with their project tags, optionally filtered by `project`. Call this before starting new work, when debugging something that smells familiar, or when the user asks what has been learned before. workspaceId defaults to your active workspace.
create_identity
params_unexplained
Creates a new identity in the workspace. Identities capture voice, tone, role, and audience context so AI produces work from the right perspective. name is required. scope defaults to user (personal, only visible to you) or workspace (shared with all members); type defaults to person (person|company|hybrid). The contextual fields shape the identity's output: roleContext (the role/perspective to write from), background (context about the identity), audience (who it writes for), voiceDescriptors (tone keywords, e.g. "concise, direct, warm"), writingSamples (example text to imitate), alwaysDo/neverDo (behavioural rules), valuesPriorities (principles), recurringTopics (subjects it keeps returning to), brandColors/brandVisuals (brand style), and linkedLibraryIds (context libraries to link). workspaceId uses your default workspace if omitted.
update_identity
params_unexplained
Updates an existing identity by ID. Only the fields you provide are changed. The fields mirror create_identity: name, scope (user|workspace), type (person|company|hybrid), roleContext (role/perspective to write from), background (context), audience (who it writes for), voiceDescriptors (tone keywords), writingSamples (example text to imitate), alwaysDo/neverDo (rules), valuesPriorities (principles), recurringTopics (subjects to keep returning to), brandColors, brandVisuals, and linkedLibraryIds. workspaceId uses your default workspace if omitted.
delete_identity
no_return_description
Permanently deletes an identity by ID — this cannot be undone — and returns the deletion result. Use dryRun=true first to preview which workflows will have their identity_id set to null without deleting anything. workspaceId uses your default workspace if omitted.
update_task
no_return_description
Update a task title, description, or status, and return the updated task. Works for all task types (DB tasks, phase tasks, file-backed tasks). Omit workflowId to update a task by id regardless of its workflow (the server resolves it). Use this instead of update_task_status when you also need to set a title or description. workspaceId defaults to your configured workspace.
update_task_status
no_return_description
Update the status of a task (not_started|in_progress|done|dismissed) and return the updated task record. Omit workflowId to update a task by id regardless of its workflow (the server resolves it). Updates the DB task record; for legacy file-backed workflows it instead swaps the status tag on the underlying phase file. Use in_progress when starting work, done when complete, dismissed when no longer relevant. Optionally set priority, or link/clear phaseFileId for legacy file-backed workflows. workspaceId defaults to your configured workspace.
break_down_task
no_return_description
Use AI to break a broad task into 3-6 concrete, actionable subtasks: the task title and workflow context are analysed and the subtasks are created automatically, returning them with their IDs. Use when a task is too broad to complete in one step. taskId is the parent task and workflowId is the workflow that owns it; workspaceId defaults to your configured workspace.
get_project
params_unexplained
Get the project plan attached to a workflow, including all its phases (open and completed). Returns phase titles, statuses, assigned agents, and sort order so you can understand what work is planned or in progress for a workflow. workflowId is the ID of the workflow whose plan to fetch (required); workspaceId defaults to your configured workspace.
list_phases
params_unexplained
List all phases for a workflow's project plan, ordered by sort_order. Returns each phase with its ID, title, status (pending/in_progress/done/blocked), assigned agent name, and creation date. Use the phase IDs with update_phase_status to progress work. workflowId is the ID of the workflow whose phases to list (required); workspaceId defaults to your configured workspace.
add_phase
params_unexplained no_return_description
Add a phase (work item) to a workflow's project plan and return the created phase with its ID. Phases are appended at the end of the existing list; if the workflow has no project plan yet, one is created automatically. workflowId is the workflow to add to (required); title is a short, actionable description of the work (required); description is optional longer context or acceptance criteria; assignedAgentId optionally assigns an agent. workspaceId defaults to your configured workspace.
update_phase_status
no_return_description
Update the status of a project phase (pending, in_progress, done, blocked) and return the updated phase. Use this to progress phases as work is completed; setting a phase to "done" automatically records the completion time. phaseId comes from list_phases or get_project. workspaceId defaults to your configured workspace.
edit_phase
no_return_description
Update the title or description of an existing phase without changing its status or position, and return the updated phase. Use this to reword or clarify a phase. phaseId comes from list_phases; omit title or description to keep the current value. workspaceId defaults to your configured workspace.
delete_done_phases
params_unexplained
Bulk delete all phases marked as done from a workflow's project plan and return the number of phases deleted. Use this to clean up completed work. workflowId is the ID of the workflow whose done phases to remove (required); workspaceId defaults to your configured workspace.
summarize_done_phases
params_unexplained no_return_description
Generate an AI summary of all done phases in a workflow's project plan, save it as a context file in the specified library, then delete the source phases, and return the summary file it created. Also updates the plan's last_summarized_at timestamp. workflowId is the workflow whose done phases to summarise (required); libraryId is where the summary file is saved; summaryTitle names the file (e.g. "Auth Rewrite — June 2026"). workspaceId defaults to your configured workspace.
delete_phase
no_return_description
Delete a single phase from a project plan by its phase ID and return confirmation. Use this to remove a specific work item; to bulk-remove completed work, use delete_done_phases instead. phaseId comes from list_phases or get_project. workspaceId defaults to your configured workspace.
reorder_phases
params_unexplained
Reorder the phases in a workflow's project plan by providing the full list of phase IDs in the desired order; the plan's sort order is updated to match. workflowId is the ID of the workflow whose plan order to change (required); orderedIds is the phase IDs in the desired order, typically the full set for the plan. workspaceId defaults to your configured workspace.
delete_library
name_restates_behavior no_return_description
Remove a context library from the workspace: it moves to trash and is recoverable within 30 days, so the deletion is not permanent. Requires owner or admin role. libraryId is the UUID of the library to delete. Returns confirmation that the library was moved to trash. workspaceId uses your default workspace if omitted.
restore_library
name_restates_behavior no_return_description
Bring a context library back from trash so it is usable again. Only libraries deleted within the last 30 days can be restored. libraryId is the UUID of the library to restore. Returns confirmation of the restore. workspaceId uses your default workspace if omitted.
list_trash
no_return_description
Return all context libraries currently in the workspace trash (deleted within the last 30 days, not yet permanently removed), with the information needed to restore them via restore_library. workspaceId uses your default workspace if omitted.
delete_agent
name_restates_behavior no_return_description
Permanently remove an agent from the workspace — this cannot be undone, so only delete an agent you are certain is no longer needed. System agents (harness agents) cannot be deleted. agentId is the ID of the agent to delete. Returns confirmation of the deletion. workspaceId uses your default workspace if omitted.
list_agents
name_restates_behavior no_return_description
Return all agents (AI assistant configurations) in a workspace — each with its role, persona, and capabilities — so you can see which assistant roles exist and pick an agentId for other operations. workspaceId uses your default workspace if omitted.
get_notifications
name_restates_behavior no_return_description
Fetch the current user's notification inbox — both activity notifications and broadcasts — returning the notifications (with their ids for mark_notification_read), optionally only unread ones via unreadOnly. limit caps the count (default 20) and offset paginates (default 0). workspaceId uses your configured workspace if omitted.
get_unread_count
no_return_description
Return the total number of unread notifications (activity + broadcasts) for the current user, so you can tell whether anything needs surfacing via get_notifications. workspaceId uses your configured workspace if omitted.
update_notification_preferences
name_restates_behavior no_return_description
Change the current user's notification settings and return the saved preferences: master toggles inAppEnabled and emailEnabled, emailFrequency for digest cadence (realtime|daily|weekly|never), per-type toggles via preferences (e.g. { "fileEdit": false, "mention": true }), and Do Not Disturb (doNotDisturb, optionally with doNotDisturbUntil as the ISO end time). workspaceId uses your configured workspace if omitted.
dismiss_broadcast
name_restates_behavior no_return_description
Remove a broadcast notification from the inbox so it no longer appears, and return confirmation. broadcastId is the ID of the broadcast to dismiss. workspaceId uses your configured workspace if omitted.
access_request
no_return_description
Request access to a private library or workflow you cannot see, or — as the resource owner — list, approve, or deny pending requests. Returns the outcome: the submitted request, the request list, or the approval/denial result. Use action="request" when a loaded workflow reports a locked library (see its requestAccess affordance). action=request needs resourceType and resourceId plus an optional reason; action=list shows your own requests (mine=true) or a resource's pending requests; action=approve/deny resolves a request via requestId (deny takes an optional rejectionReason). This works from the terminal — the user does not need to open the web app. workspaceId defaults to your default workspace.
share_list
name_restates_behavior no_return_description
Return the active public share links for a file — each with its access mode, permission, and view count, plus the shareId needed by share_revoke — so you can see and manage who can currently view or download the file. fileId is the UUID of the file.
share_revoke
name_restates_behavior no_return_description
Immediately disable an existing public share link so it stops working, and return confirmation. fileId is the file's UUID and shareId comes from share_list.
list_comments
no_return_description
Return the comment threads on a file — open (unresolved) threads by default, plus resolved ones when includeResolved=true. Each comment shows its author (members and external share-link guests), the anchored line number if any, and the comment id needed by resolve_comment and add_comment replies, so you can act on the feedback. fileId is the UUID of the file.
add_comment
no_return_description
Add a comment to a file (or reply to an existing comment via parentCommentId) and return the created comment with its id. Authored as the connected user; optionally anchor to a line with lineNumber. Replying to an external (guest) commenter also emails them. fileId is the file's UUID; content is the plain-text comment (max 10000 chars).
resolve_comment
no_return_description
Resolve (acknowledge) a comment thread once it has been addressed — it disappears from default views everywhere (web, desktop, public share page, list_comments) — and return the updated state. Pass the ROOT comment id (from list_comments); the whole thread resolves. Set resolved=false to reopen.

Selection evidence

Confusable tool pairs.

17 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.

Tool A Tool B Confidence Why they collide
update_task update_task_status high Both accept a taskId plus a status, and update_task is a superset that also edits title/description. A request like 'set task X to done' matches both, and the correct pick depends on whether only the status changes; the descriptions explicitly tell the agent to reason between them.
delete_done_phases delete_phase medium 'Remove the completed phases' is ambiguous between bulk-deleting all done phases (delete_done_phases) and deleting one specific done phase (delete_phase); both match singular/plural phrasing like 'delete the done phase(s)'.
delete_done_phases summarize_done_phases medium Both act on and delete the finished phases, but summarize additionally archives an AI summary first. 'Clean up / wrap up the done phases' matches both, and the wrong pick means lost history or an unwanted extra file.
manual_project_setup auto_project_setup medium Same end result (full project workspace), differing only in guided vs autonomous mode. Neutral wording like 'set up a project for me' matches both because the documented trigger phrases ('walk me through' vs 'just set it up') are absent.
manual_research_setup auto_research_setup medium Mirror image of the project-setup pair: both create a research workspace and differ only in interactivity, so 'help me set up a research workspace' doesn't say whether the user is present to guide step-by-step or wants it done autonomously.
auto_project_setup auto_research_setup medium Both are autonomous one-shot setups that create a library, agents, and workflow from a name/description. 'Automatically set up a research project on X' contains both 'project' and 'research' terms, so either tool can match.
manual_project_setup manual_research_setup medium Both are guided, interactive step-by-step setups with the same schema. A request like 'walk me through setting this up' doesn't specify whether the user means a project workspace or a research workspace.
capture_idea idea_kickoff medium Both handle 'an idea', and capture_idea explicitly warns that venture ideas must go to idea_kickoff ('when unsure, prefer idea_kickoff'). 'I have an idea for X' is a documented trap between saving a quick note and launching a full business analysis.
create create_agent medium The generic create tool explicitly supports type='agent' alongside file/library/skill/workflow, so 'create a new agent named X' surfaces both the generic multi-type tool and the specialized agent tool, forcing a choice between equivalent-looking paths.
list list_agents medium Generic list has type='agents' in its enum, so 'list all agents in the workspace' matches both tools; they return different-shaped results and the agent must decide between the generic dispatcher and the agent-specific tool.
create_identity create_agent medium An agent (AI assistant with personaId/systemPrompt) and an identity (voice/tone/role/audience) both describe a persona-like entity. 'Create a support persona / a voice for our team' can plausibly route to either.
get_notifications get_unread_count medium Count-style requests such as 'how many unread notifications do I have' match both the inbox tool (which has an unreadOnly flag) and the dedicated count tool; the agent must infer whether a list or a total is wanted.
create create_identity medium Generic create reads as the catch-all creator but its type enum omits identity, so a surface-level 'create a new identity/voice profile' can send a skimming agent to the generic tool with an invalid type instead of create_identity.
delete delete_agent medium Generic delete's description ('Delete a resource') sounds all-purpose but its enum only covers file/skill/workflow. 'Delete agent X' can therefore surface the generic destructive tool even though only delete_agent handles agents.
update_task_status update_phase_status low Both are status updates keyed by {id, status, workspaceId}. 'Mark it done' is only ambiguous when the entity's type (DB task vs phase, including legacy file-backed tasks that ARE phases) isn't clear from the utterance; the differing status enums usually disambiguate.
contextium_help contextium_status low Help ('what can Contextium do / what tools are available') and status ('show my setup / what resources do I have') share phrasing like 'show what's available', so a vague 'show me what Contextium offers' could match either.
list_agents list_agent_jobs low 'Show me my agents' can mean the assistant configurations (list_agents) or what agents are doing via their runner jobs (list_agent_jobs); phrasing like 'what are my agents working on' blurs the line, though the descriptions do distinguish configs from jobs.

Compare the field

One score is useful.
The evidence makes it actionable.

Back to the leaderboard