Real-time context budget tracking and agent observability MCP server
Five tools with clear naming (verb_noun pattern: cp_start_*, cp_track_*, cp_get_*) and reasonable descriptions (80-180 chars). All tools have input schemas with Zod validation and type definitions. However, output schemas are undocumented, responses are JSON-stringified text without declared field structure. Parameter descriptions are present but generic; several lack actionable constraints (e.g., 'Custom session ID' doesn't explain format or length). No error handling guidance, no recovery paths, and no documentation of what happens on invalid inputs. Tool composition is sound (single responsibility), but output chaining is weak, cp_get_budget and cp_get_run_summary return opaque JSON strings rather than structured objects with typed fields.
Get the current context budget for a run.
Get a full summary of a run including token usage, tool calls, and budget timeline.
Start a new agent run within a session. One run = one agent task.
Start a ContextPulse tracking session. Call this once at the beginning of an agent session.
Track a tool call with its input and output. Call this after every tool call to keep the context budget updated.
Output schemas undocumented. All tools return JSON-stringified text in a generic 'content' wrapper. LLMs cannot infer field structure, types, or chaining IDs. cp_get_budget and cp_get_run_summary return opaque strings instead of structured objects.
Parameter descriptions lack actionable constraints. 'Custom session ID (auto-generated if omitted)' does not specify format, length, or character restrictions. 'Token limit for this session (default: 200000)' lacks min/max bounds. LLMs cannot validate inputs without explicit constraints.
No error handling or recovery guidance. Tools do not document what happens on invalid runId, sessionId, or token counts. No error messages guide LLM retry or fallback behavior. Missing pattern: recovery-guide.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
cp_track_tool_call accepts 'arguments' and 'output' as z.unknown() with no validation or sanitization. LLMs could pass arbitrary nested objects; no guidance on size limits or structure. Invites token bloat and potential injection risks.
No pagination or result limits documented. cp_get_run_summary could return unbounded tool call history. No limit parameter, no cursor, no guidance on expected response size. Risks context window exhaustion.