Hosted MCP server for the smplkit platform — schedule and run HTTP jobs from your AI agent. Exposes smplkit's capabilities as tools for managing feature flags, config, logging, audit, and scheduled jobs.
The smplkit MCP server demonstrates solid engineering with 29 well-named, verb-prefixed tools covering jobs, flags, configs, loggers, events, and forwarders. All tools have explicit descriptions (averaging ~120 chars) and documented input schemas with type definitions. Tool names follow verb_noun conventions (list_jobs, create_job, delete_job, etc.) making agent intent clear. Parameter descriptions are present and reasonably specific. However, there are notable gaps: output schemas are not documented anywhere in the source; parameter constraints (enums, ranges, patterns) are sparse; error handling guidance is minimal; and several tools accept flexible/undocumented parameters (e.g., headers as object without structure guidance, retry_policy as string without enum). The parameter descriptions, while present, often lack actionable constraint information (e.g., 'timeout_seconds' has no min/max range, 'schedule' has no format guidance). Tool composition is good, related operations are separate tools, and most tools return IDs needed for chaining. Risk annotations (READ_ONLY, WRITE, DESTRUCTIVE, REVERSIBLE) are explicitly declared, which is excellent for agent decision-making. The server is production-ready but would benefit from output schema documentation, enum-based parameter validation, and more detailed error recovery guidance.
Create a config, optionally inheriting from a parent and declaring items.
Create a feature flag with optional per-environment overrides.
Create an outbound forwarder that posts audit events to a public HTTP endpoint.
Create a job; the kind is inferred from `schedule`/`run_at`.
Delete a config.
Delete a feature flag.
Output schemas not documented. Tools like list_jobs, get_job, list_flags, etc. return structured objects but no documentation specifies the response schema fields. LLMs cannot plan downstream calls without knowing what fields are available.
Parameter constraints missing enums and ranges. Parameters like 'kind' (create_job), 'status' (list_runs), 'trigger' (list_runs), 'level' (set_log_level) and 'severity' (query_events) accept string values but lack explicit enum constraints. LLMs may hallucinate invalid values. Ranges for 'timeout', 'timeout_seconds', 'limit', 'page_size' are not specified (no min/max).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 71 | 2026-07-28+ | v2 |
Delete an audit event forwarder.
Delete a job. Its run history is retained.
Fetch one config's full state: items plus per-environment overrides.
Fetch one audit event by id.
Get one flag's full state (values, targeting, rules).
Get one job's full configuration (schedule, target request, environments).
Fetch one logger and its per-environment log levels.
Fetch one run, including its captured HTTP response.
List configs with their items and per-environment overrides.
List all configured environments.
List feature flags with their per-environment states.
List configured forwarders and their per-environment enablement.
List the account's configured jobs, each enriched with its latest run. Use this to see what's scheduled and whether each job's most recent run succeeded or failed. Each job includes its schedule, target request, and a `last_run` summary (status and captured HTTP status).
List all loggers and their per-environment log levels.
List runs by job, status, trigger, environment, and/or a time window.
Query the audit event log by actor, resource, category, severity, and/or time window.
Reset a logger's log level in an environment to its default.
Fire one immediate run and (by default) wait for it to finish. The run is enqueued and executed by the worker, so it may return `PENDING`; when `wait` is set we poll until a terminal state (or timeout) so the captured response is available to the caller.
Set one item's value in one environment. GET-mutate-PUT full replace: other items and environments are preserved. The item is auto-declared (with an inferred type) if it isn't already, so this tool is fluent even on a config created with no items.
Set a flag's per-environment value, kill switch, and rules in one call.
Set the runtime log level for a logger in an environment.
Dry-run an endpoint: send a sample request and report status, latency, and body.
Change a job via GET-mutate-PUT: fetch, apply the partial change, full-replace.
Complex objects passed as strings without structure guidance. Parameters like 'headers' (dict), 'retry_policy' (string), 'rules' (array in set_flag), and 'filter' (object in create_forwarder) lack detailed schema or format guidance. For 'headers', document that it's a key-value map of HTTP headers; for 'retry_policy', specify valid policy types; for 'rules' in set_flag, document the rule object schema.
Error handling lacks recovery guidance. Code shows _FAILURE_HINTS for SSRF_BLOCKED and QUOTA_EXCEEDED, but only in run_job; other tools do not provide actionable error messages or recovery paths. create_job, update_job, and others do not document failure modes or suggest next steps when operations fail.
Destructive operations lack confirmation mechanism. delete_job, delete_flag, delete_config, and delete_forwarder have DESTRUCTIVE risk but no dry-run or confirmation step. Agents should confirm before irreversible operations.
Parameter descriptions for date/time fields lack format guidance. 'run_at' (ISO8601 datetime) and 'since'/'until' (ISO8601 datetime) could be clearer. Example: 'ISO8601 datetime string (e.g., 2024-01-15T14:30:00Z)'. Current descriptions are terse and assume LLM format knowledge.