A sample ASP.NET Core MCP server demonstrating programmatic capability registration, execution, artifact storage, and mutation workflows with in-memory task management.
Mixed quality across 13 tools. Strengths: all tools have descriptions (10-200 chars, mostly adequate); input schemas present with typed parameters; clear verb-noun naming (list_, get_, execute, apply, cancel, search, read, export, complete). Weaknesses: parameter descriptions are minimal (5-30 chars, well below 72-char baseline); no output schemas documented; error handling absent; no enum constraints on string parameters (e.g., detailLevel in capabilities.search); sampling tools (tasks.summarizeWithSampling, tasks.readForSampling) rely on deprecated MCP Sampling pattern; mutation workflow (list/apply/cancel) lacks confirmation/dry-run guidance; code.execute is high-risk (arbitrary JS) with no input validation hints or sandbox documentation.
Reads execution artifacts with pagination support and cursor-based navigation.
Searches and discovers available capabilities with optional detail levels and result limits.
Executes JavaScript code in a Jint-backed runtime with access to programmatic capabilities and artifact storage.
Applies a pending mutation after approval with nonce validation.
Cancels a pending mutation before it is applied.
Lists pending mutations and approvals for the current conversation.
Lists the sample projects and their open task counts.
Output schemas not documented. LLMs cannot infer what fields to expect from tool responses, forcing them to guess at downstream field names and risk broken tool chains.
Parameter descriptions are minimal (5-30 chars vs. 72-char baseline). E.g., 'detailLevel' described as 'Detail level for capability results (e.g., Full)' lacks enum values, valid range, or guidance on when to use each level.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | <=2025-11-25 | v2 |
Marks a task as completed with mutation approval workflow.
Exports a task report for a project as markdown with task details.
Returns one task with project and status details.
Lists tasks from the in-memory sample workspace.
Read-only sampling tool for live client sampling within explicit read-only scopes.
Uses live MCP sampling to ask the connected client for a short task summary.
code.execute accepts arbitrary JavaScript with no input validation hints, sandbox documentation, or error recovery guidance. High-risk tool lacks security/safety context for LLM decision-making.
Sampling tools (tasks.summarizeWithSampling, tasks.readForSampling) rely on deprecated MCP Sampling pattern (removed in spec 2026-07-28). Should integrate directly with LLM provider API or use Multi Round-Trip Requests (result 'input_required').
Mutation workflow (mutation.list/apply/cancel) lacks confirmation/dry-run pattern. Irreversible operations should support explicit user approval before execution to prevent accidental state changes.