# Solwyn (pypi · solwyn-cli)

Check budgets before AI spend, record what your code spends and read Solwyn costs.

- Trust score: 59/100 (low)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- pypi · `solwyn-cli`: 59/100 (this document), [markdown](https://verifymcp.io/servers/ai-solwyn-solwyn/solwyn-cli.md), [page](https://verifymcp.io/servers/ai-solwyn-solwyn/solwyn-cli)

## Channel facts

- Registry: `pypi`
- Package: `solwyn-cli`
- Version: `0.4.3`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Supply Chain Security**: 82/100
  - No malware found by supply-chain analysis.
  - CVE check failed: a known high-severity CVE affects mcp 2.1.1, a direct dependency. A fixed version is available.
  - Runs hatchling.build at install time, a recognised build step with no custom scripting around it.
  - 7 of 55 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 19/100
  - Repository check failed: no source repository is declared.
  - Build provenance not yet verified.
  - Clear OSI-approved license (Apache-2.0).
  - Actively maintained (last published 1 days ago).
  - Security-disclosure policy not yet verified: we couldn't inspect the source repository.
- **Schema Quality & AI Usability**: 60/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 8432 tokens (~227/item across 37 items; 37 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 13/100
  - Stability observed for 4 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 37 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 38 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

### How do I install the Solwyn MCP server?

Solwyn runs locally as a PyPI package, launched with uvx solwyn-cli. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add ai-solwyn-solwyn -- uvx solwyn-cli
```

### Cursor

```json
{
  "mcpServers": {
    "ai-solwyn-solwyn": {
      "command": "uvx",
      "args": [
        "solwyn-cli"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "ai-solwyn-solwyn": {
      "command": "uvx",
      "args": [
        "solwyn-cli"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add ai-solwyn-solwyn -- uvx solwyn-cli
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ai-solwyn-solwyn": {
      "type": "local",
      "command": [
        "uvx",
        "solwyn-cli"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add ai-solwyn-solwyn --command uvx --arg solwyn-cli
```

### Hermes

```yaml
mcp_servers:
  ai-solwyn-solwyn:
    command: "uvx"
    args: ["solwyn-cli"]
```

### Netclaw

```json
{
  "McpServers": {
    "ai-solwyn-solwyn": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "solwyn-cli"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add ai-solwyn-solwyn -t stdio -c uvx -a solwyn-cli
```

### Other

```json
{
  "mcpServers": {
    "ai-solwyn-solwyn": {
      "command": "uvx",
      "args": [
        "solwyn-cli"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-04 (score 59, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-03 (score 58, +15)

- [security improvement] Malware scan: unverified → pass
- [functional] Package version: 0.4.2 → 0.4.3

### 2026-11-02 (score 43, −14)

- [security regression] Malware scan: pass → unverified
- [functional improvement] Stability: unverified → 0.03
- [functional] Package version: 0.4.0 → 0.4.2

### 2026-11-01 (score 57)

First indexed and scored.

## MCP tools (37)

### `budget_status` (~95 tokens)

Read budget status

Use `solwyn budget status --json` for polling. It is a pure read and does not hold budget. Accepts a Solwyn login or a project API key with access to the selected project.

Input parameters:

- `project_id`: Read project ID; non-empty when supplied. Overrides launch --project, then SOLWYN_PROJECT_ID/config default_project. A key must have access to this project; this never changes the authenticated write…

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `budget_check` (~694 tokens)

Check and reserve budget

Reserve budget only immediately before the caller-made spend. Denial is a successful decision with allowed=false, not an execution error. Denials record attribution by default; no_record skips ingest. Never automatically replay an ambiguous check: each invocation can create a new reservation. Use `solwyn budget check` followed by `solwyn budget confirm` only around a specific un-instrumented provider spend that you make yourself. Never wrap SDK-instrumented code with `budget check` or `budget confirm`; the Solwyn SDK already reserves and confirms that spend. Fail-open is explicit: when a check returns `allowed=true` and `reservation_id=null`, skip confirm. Do not create repeated unconfirmed checks. They temporarily hold budget and can cause self-denial. Requires a write-scoped project API key; writes use its project, not the selected read project.

Input parameters:

- `agent_run_id`: Stable caller run ID (at most 256 characters); overrides SOLWYN_AGENT_RUN_ID. Reuse across this run; never replace it to evade a stopped run.
- `audio_seconds`: Estimated billed audio duration in seconds, nonnegative; null means unobservable, zero means no duration.
- `estimated_input_tokens` (integer, required): Estimated input token count for admission; nonnegative integer. This estimate reserves budget, not provider output.
- `estimated_output_tokens`: Optional output token bound, integer 0–100,000,000, for denial attribution only; does not set the reservation amount or provider generation limit.
- `fallback_models`: Ordered model alternatives available to the caller, at most 8 models of at most 2048 characters each; must align one-for-one with fallback_providers. Inspect returned routing before spending.
- `fallback_providers`: Ordered provider alternatives available to the caller, at most 8; must align one-for-one with fallback_models. Inspect the decision before routing; Solwyn does not invoke providers.
- `generation_count`: Estimated number of billed generations, nonnegative integer; null means unobservable, zero means none.
- `image_count`: Estimated number of billed images, nonnegative integer; null means unobservable, zero means no billed images.
- `input_characters`: Estimated billed input character count, nonnegative integer; null means unobservable, zero means none.
- `is_estimated` (boolean): True when usage quantities are estimates rather than observed provider usage; false by default.
- `model` (string, required): Model used for this call, at most 2048 characters; use the actual served model when recording or confirming.
- `no_record` (boolean): True skips denial attribution ingest only; the reservation decision still runs. False records denied calls by default.
- `provider` (required): Provider used for this call; use the actual served provider when recording or confirming.
- `quality`: Pricing quality selector, at most 32 characters; preserve the model's supported variant rather than inventing a default.
- `resolution`: Pricing resolution selector, at most 32 characters; preserve the model's supported variant rather than inventing a default.
- `tags`: Attribution tags; explicit keys override SOLWYN_TAGS. At most 10 merged keys, keys 1–64 characters, values at most 256, no NUL. Whitespace and case are preserved.
- `video_seconds`: Estimated billed video duration in seconds, nonnegative; null means unobservable, zero means no duration.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `budget_confirm` (~1403 tokens)

Confirm usage and record attribution

Settle a non-null reservation after caller-made spend using observed token/media usage and actual served provider/model. Records attribution with the same call_id and attempt_index; no_record skips ingest. Recording failure does not undo settlement. Save the FIRST recording_retry event. After known settlement success, use only record_only=FIRST event to retry ingest; this reports settlement=not_submitted. After a lost 204, within Core's project-bound 3600-second receipt window replay identical settlement inputs with no_record=true. After a known 204, submit only record_only=FIRST event; never replace it with the replay's unused new event. Ordinary fresh-confirm replay regenerates timestamp/SDK identity and rereads ambient tags. An event never returned cannot be reconstructed. The receipt cannot correct successful settlement. Missing-media 422 permits corrected quantities under the retained funding ID; never reserve again for completed provider work. Use `solwyn budget check` followed by `solwyn budget confirm` only around a specific un-instrumented provider spend that you make yourself. Never wrap SDK-instrumented code with `budget check` or `budget confirm`; the Solwyn SDK already reserves and confirms that spend. Fail-open is explicit: when a check returns `allowed=true` and `reservation_id=null`, skip confirm. Do not create repeated unconfirmed checks. They temporarily hold budget and can cause self-denial. Requires a write-scoped project API key; writes use its project, not the selected read project.

Input parameters:

- `accepted_prediction_tokens` (integer): Accepted prediction token subset of output_tokens; integer 0–100,000,000. Do not add again to output total.
- `agent_run_id`: Stable caller run ID (at most 256 characters); overrides SOLWYN_AGENT_RUN_ID. Reuse across this run; never replace it to evade a stopped run.
- `attempt_index` (integer): Observed nonnegative provider-attempt index, 0 by default; retained in attribution, never creates or retries a provider attempt. Keep identical on recording retry.
- `audio_input_tokens` (integer): Audio token subset already included in input_tokens; integer 0–100,000,000. Distinct from audio seconds.
- `audio_output_tokens` (integer): Audio token subset already included in output_tokens; integer 0–100,000,000. Distinct from audio seconds.
- `cache_creation_1h_tokens` (integer): Input tokens written to the one-hour cache; subset of input_tokens, integer 0–100,000,000.
- `cache_creation_5m_tokens` (integer): Input tokens written to the five-minute cache; subset of input_tokens, integer 0–100,000,000.
- `cached_input_tokens` (integer): Cached-read input token subset already included in input_tokens; integer 0–100,000,000, not additional tokens.
- `call_id`: Caller-persisted canonical UUID, at most 36 characters; required for settlement. Keep identical across settlement and recording retries; omit for record_only.
- `image_input_tokens` (integer): Image token subset already included in input_tokens; integer 0–100,000,000. Distinct from image count.
- `image_output_tokens` (integer): Image token subset already included in output_tokens; integer 0–100,000,000. Distinct from image count.
- `input_tokens` (integer): Total observed input tokens, including cached, cache creation, audio, image and tool-use input subsets; integer 0–100,000,000. The sum of the three cache buckets must not exceed this total.
- `is_estimated` (boolean): True when usage quantities are estimates rather than observed provider usage; false by default.
- `is_provider_fallback` (boolean): True when the served provider differs through fallback routing; report the actual served provider and model.
- `latency_ms` (number): Observed call latency in milliseconds; finite, nonnegative number. Used for attribution, not reservation settlement pricing.
- `media_usage`: Actual observed media billing quantities and pricing variants, forwarded unchanged to settlement and attribution. Null quantities are unobservable; zero means none. Never substitute admission estimat…
- `modality`: Actual completed call modality for attribution (text by default); the pricing card selects settlement units from observed media_usage.
- `model`: Actual served model, required for settlement, at most 2048 characters; omit for record_only.
- `no_record` (boolean): True skips ingest only; settlement still occurs. After a lost 204, replay identical settlement inputs with no_record=true; after a known 204, use record_only with the FIRST retained event, never this…
- `output_tokens` (integer): Total observed output tokens, including reasoning, audio, image and prediction subsets; integer 0–100,000,000.
- `parent_run_id`: Parent caller run ID for attribution, at most 256 characters; does not change the reservation's run identity.
- `provider`: Actual served provider, required for settlement; omit for record_only.
- `provider_region`: Actual served provider region for regional pricing, at most 32 characters; omit when unavailable.
- `reasoning_tokens` (integer): Reasoning token subset already included in output_tokens; integer 0–100,000,000, not additional tokens.
- `record_only`: Exact FIRST retained recording_retry event; omit every other argument. After a lost 204, first obtain a known 204 by replaying identical settlement inputs with no_record=true. Never replace the FIRST…
- `rejected_prediction_tokens` (integer): Rejected prediction token bucket reported by the provider; integer 0–100,000,000. Preserve provider usage without double-counting totals.
- `reservation_id`: Non-null, non-empty reservation ID returned by check, required for settlement. Confirm only after its call using the same project key identity; omit for record_only.
- `run_name`: Human-readable run name for attribution, at most 255 characters; distinct from stable agent_run_id.
- `service_tier`: Actual served service tier for pricing; omit when unavailable so Core applies its default pricing behavior.
- `status` (string): Completed provider-call outcome: success or error. Used for attribution; an error does not imply zero observed usage.
- `tags`: Attribution tags; explicit keys override SOLWYN_TAGS. At most 10 merged keys, keys 1–64 characters, values at most 256, no NUL. Whitespace and case are preserved.
- `tool_use_input_tokens` (integer): Tool-use input token subset already included in input_tokens; integer 0–100,000,000, not additional tokens.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `get_project_status` (~86 tokens)

Read project health

Read the configured project's budget and provider health without authorizing spend. Accepts a Solwyn login or a project API key with access to the selected project.

Input parameters:

- `project_id`: Read project ID; non-empty when supplied. Overrides launch --project, then SOLWYN_PROJECT_ID/config default_project. A key must have access to this project; this never changes the authenticated write…

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `get_forecast` (~87 tokens)

Read spend forecast

Read the configured project's month-to-date spend forecast without authorizing spend. Accepts a Solwyn login or a project API key with access to the selected project.

Input parameters:

- `project_id`: Read project ID; non-empty when supplied. Overrides launch --project, then SOLWYN_PROJECT_ID/config default_project. A key must have access to this project; this never changes the authenticated write…

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `get_costs` (~520 tokens)

Read grouped costs

Read project costs grouped by a Core dimension or tag:<key>, or account costs grouped by project by default. Shared filters/custom windows apply; account mode permits only model/provider/modality and window filters. Project mode accepts a project key or a Solwyn login; account=true requires a Solwyn login and is mutually exclusive with explicit project_id. Account filters are restricted by Core.

Input parameters:

- `account` (boolean): True reads account costs with a Solwyn login; mutually exclusive with explicit project_id. Supports only model/provider/modality/group_by and window filters.
- `agent_run`: Filter by run_<32 lowercase hex> storage ID or otherwise exact raw caller run name, at most 256 characters.
- `failover_reason`: Filter stored costs by failover reason; omit to include all reasons.
- `from_`: Custom window start: timezone-aware ISO timestamp paired with to; the pair overrides time_range.
- `group_by`: Core grouping dimension (for example model, provider or modality), or tag:<key> with key 1–64 characters and no NUL. Core validates dimensions.
- `modality`: Filter stored costs by call modality; omit to include all modalities.
- `model`: Filter stored costs by exact served model identifier; omit to include all models.
- `model_fallback`: Filter is_model_fallback; false selects non-fallback calls, null includes both.
- `project_id`: Read project ID; non-empty when supplied. Overrides launch --project, then SOLWYN_PROJECT_ID/config default_project. A key must have access to this project; this never changes the authenticated write…
- `provider`: Filter stored costs by served provider; omit to include all providers.
- `provider_fallback`: Filter is_provider_fallback; false selects non-fallback calls, null includes both.
- `provider_region`: Filter stored costs by served provider region; omit to include all regions.
- `service_tier`: Filter stored costs by served service tier; omit to include all tiers.
- `status`: Filter stored costs by recorded call status; omit to include all statuses.
- `tag`: AND filters as key=value strings; unique keys 1–64 characters, values at most 256, no NUL. Empty values, whitespace and case are preserved.
- `time_range`: Preset query window; paired custom start/end timestamps override this preset. Available values are declared by the schema.
- `to`: Custom window end: timezone-aware ISO timestamp paired with from_, strictly later than from_; overrides time_range.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `list_projects` (~29 tokens)

List account projects

List projects visible to the logged-in user. Requires a Solwyn login. Requires a Solwyn login.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `get_cost_total` (~409 tokens)

Read cost total

Read uncapped project cost totals with the same cost filters and custom windows as get_costs. Accepts a Solwyn login or a project API key with access to the selected project.

Input parameters:

- `agent_run`: Filter by run_<32 lowercase hex> storage ID or otherwise exact raw caller run name, at most 256 characters.
- `failover_reason`: Filter stored costs by failover reason; omit to include all reasons.
- `from_`: Custom window start: timezone-aware ISO timestamp paired with to; the pair overrides time_range.
- `modality`: Filter stored costs by call modality; omit to include all modalities.
- `model`: Filter stored costs by exact served model identifier; omit to include all models.
- `model_fallback`: Filter is_model_fallback; false selects non-fallback calls, null includes both.
- `project_id`: Read project ID; non-empty when supplied. Overrides launch --project, then SOLWYN_PROJECT_ID/config default_project. A key must have access to this project; this never changes the authenticated write…
- `provider`: Filter stored costs by served provider; omit to include all providers.
- `provider_fallback`: Filter is_provider_fallback; false selects non-fallback calls, null includes both.
- `provider_region`: Filter stored costs by served provider region; omit to include all regions.
- `service_tier`: Filter stored costs by served service tier; omit to include all tiers.
- `status`: Filter stored costs by recorded call status; omit to include all statuses.
- `tag`: AND filters as key=value strings; unique keys 1–64 characters, values at most 256, no NUL. Empty values, whitespace and case are preserved.
- `time_range`: Preset query window; paired custom start/end timestamps override this preset. Available values are declared by the schema.
- `to`: Custom window end: timezone-aware ISO timestamp paired with from_, strictly later than from_; overrides time_range.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `list_budget_rules` (~165 tokens)

List budget rules

Read budget rule conditions, routing, and separate paused/snoozed states. A snoozed hard_deny still denies; pausing releases enforcement. Rule keys change when keyed fields are edited. Project keys or a Solwyn login can list rules; with_last_fired=true requires a Solwyn login for the account latest-events read.

Input parameters:

- `project_id`: Read project ID; non-empty when supplied. Overrides launch --project, then SOLWYN_PROJECT_ID/config default_project. A key must have access to this project; this never changes the authenticated write…
- `with_last_fired` (boolean): Include latest firing within Core's default 30d retention window; requires a Solwyn login even for project budget rules. Null means no matching history in that window.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `record_call` (~670 tokens)

Record completed call attribution

Record one caller-owned completed call without reserving or settling budget, including a record-only retry after known settlement success. Do not duplicate SDK events. Persist call_id before sending and reuse it with unchanged payload and attempt_index=0 on retries; omission generates a new ID per call. Core deduplicates the project/call_id/attempt_index identity while retained; this is not an update mechanism. Costs are server-priced. Inspect status, rejected and duplicates even when transport succeeds. Requires a write-scoped project API key; writes use its project, not the selected read project.

Input parameters:

- `agent_run_id`: Stable caller run ID (at most 256 characters); overrides SOLWYN_AGENT_RUN_ID. Reuse across this run; never replace it to evade a stopped run.
- `agent_run_name`: Human-readable run name for attribution, at most 255 characters; distinct from stable agent_run_id.
- `call_id`: Caller-persisted UUIDv4 or UUIDv7, at most 36 characters; reuse for retries with identical payload and attempt_index=0. Omission generates a new ID on each invocation, so cannot deduplicate lost-resp…
- `input_tokens`: Total observed input tokens, including cached, cache creation, audio, image and tool-use input subsets; integer 0–100,000,000. The sum of the three cache buckets must not exceed this total. If omitte…
- `latency_ms` (number): Observed call latency in milliseconds; finite, nonnegative number. Used for attribution, not reservation settlement pricing.
- `media_usage`: Observed media billing quantities and pricing variants; null quantities mean unobservable, zero means none. Used for ingest pricing, not reservation settlement.
- `modality`: Recorded call modality (text by default); report the actual modality for server-side pricing and analytics.
- `model` (string, required): Model used for this call, at most 2048 characters; use the actual served model when recording or confirming.
- `output_tokens`: Total observed output tokens, including reasoning, audio, image and prediction subsets; integer 0–100,000,000. If omitted, use token_details.output_tokens or zero; when both are supplied they must ma…
- `parent_agent_run_id`: Parent caller run ID for attribution, at most 256 characters; omit for a root run.
- `provider` (required): Provider used for this call; use the actual served provider when recording or confirming.
- `provider_region`: Actual served provider region for regional pricing, at most 32 characters; omit when unavailable.
- `service_tier`: Actual served service tier for pricing; omit when unavailable so Core applies its default pricing behavior.
- `status` (string): Completed provider-call outcome: success or error. Used for attribution; an error does not imply zero observed usage.
- `tags`: Attribution tags; explicit keys override SOLWYN_TAGS. At most 10 merged keys, keys 1–64 characters, values at most 256, no NUL. Whitespace and case are preserved.
- `token_details`: Observed token totals and subset buckets; subsets are not additional tokens. Explicit top-level input/output counts must equal these totals.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `list_tags` (~91 tokens)

List attribution tag keys

List account-scoped tag discovery through a project. Team required; keys preserve whitespace and case. Accepts a Solwyn login or a project API key with access to the selected project.

Input parameters:

- `project_id`: Read project ID; non-empty when supplied. Overrides launch --project, then SOLWYN_PROJECT_ID/config default_project. A key must have access to this project; this never changes the authenticated write…

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `list_tag_values` (~206 tokens)

List attribution tag values

Read one page of account-scoped values for a verbatim tag key. Team required; prefix is case-sensitive. Accepts a Solwyn login or a project API key with access to the selected project.

Input parameters:

- `cursor`: Opaque cursor from a previous page of the same query; preserve filters and ordering when continuing.
- `key` (string, required): Verbatim tag key, 1–64 characters and no NUL; whitespace and case are significant. Team plan required.
- `limit` (integer): Maximum entries in this page, integer 1–100; defaults to 25. Continue using the returned cursor.
- `prefix`: Case-sensitive value prefix, at most 256 characters and no NUL; omit for all values of this key.
- `project_id`: Read project ID; non-empty when supplied. Overrides launch --project, then SOLWYN_PROJECT_ID/config default_project. A key must have access to this project; this never changes the authenticated write…

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `list_agent_runs` (~320 tokens)

List agent runs

List project agent runs. Costs are lifetime totals; the window only selects which runs qualify. Accepts a project key or login. Accepts a Solwyn login or a project API key with access to the selected project.

Input parameters:

- `cursor`: Opaque cursor from a previous page of the same query; preserve filters and ordering when continuing.
- `from_time`: Custom run-selection start: timezone-aware RFC3339 timestamp paired with to_time; overrides time_range. Costs remain lifetime totals.
- `limit` (integer): Maximum entries in this page, integer 1–100; defaults to 25. Continue using the returned cursor.
- `parent`: Parent run storage ID or raw caller run ID, 1–256 characters; selects children of this parent.
- `project_id`: Read project ID; non-empty when supplied. Overrides launch --project, then SOLWYN_PROJECT_ID/config default_project. A key must have access to this project; this never changes the authenticated write…
- `query`: Case-insensitive run-name search text, at most 255 characters; omit to include all qualifying runs.
- `sort`: Descending page sort key; defaults to last_seen_at. Must match the cursor's stored sort when continuing; remove cursor when changing sort.
- `time_range`: Preset query window; paired custom start/end timestamps override this preset. Available values are declared by the schema.
- `to_time`: Custom run-selection end: timezone-aware RFC3339 timestamp after from_time; provide both bounds. Costs remain lifetime totals.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `get_agent_run` (~125 tokens)

Read agent run

Read one agent run by storage ID or exact raw run name. Accepts a project key or login. Accepts a Solwyn login or a project API key with access to the selected project.

Input parameters:

- `project_id`: Read project ID; non-empty when supplied. Overrides launch --project, then SOLWYN_PROJECT_ID/config default_project. A key must have access to this project; this never changes the authenticated write…
- `run` (string, required): Run storage ID or exact raw caller run name, 1–255 characters; ambiguous names fail with guidance to list IDs.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `list_alert_events` (~437 tokens)

Read alert history

Read cursor-paginated alert history and per-channel delivery receipts. Project keys work for project history; account history requires a Solwyn login. failed_only filters partial/failed rollups locally; scope is the rule scope. No mutation tools are exposed. Project history accepts a project key or a Solwyn login; account=true reads account-scope history, requires a Solwyn login and ignores project_id. Use list_alert_activity for all projects plus account scope.

Input parameters:

- `account` (boolean): True reads account-scope history and requires a Solwyn login; project_id is ignored. False reads the selected project using a project key or a Solwyn login.
- `all_pages` (boolean): True fetches at most 10 history pages within one 30-second/1 MiB response budget, counting empty filtered pages. A fixed limit error retains the cursor of the first unread page. False returns one pag…
- `cursor`: Opaque cursor from a previous page of the same query; preserve filters and ordering when continuing.
- `failed_only` (boolean): True keeps only partial/failed delivery rollups using a local filter; a page can be empty while next_cursor remains present.
- `from_`: Custom window start: timezone-aware ISO timestamp paired with to; the pair overrides time_range.
- `project_id`: Read project ID; non-empty when supplied. Overrides launch --project, then SOLWYN_PROJECT_ID/config default_project. A key must have access to this project; this never changes the authenticated write…
- `rule_type`: Filter by alert rule type, at most 32 characters and no NUL; omit to include all types.
- `scope`: Filter by rule scope, at most 32 characters and no NUL; this is not project/account selection (use account).
- `time_range` (string): Alert-history preset: 7d, 30d or 90d (default 30d); paired custom timestamps override it. Core may clamp retention.
- `to`: Custom window end: timezone-aware ISO timestamp paired with from_, strictly later than from_; overrides time_range.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `budget_check_batch` (~466 tokens)

Check or recover a bounded batch

Submit 1–32 checks once to Core's durable batch journal. Retain a caller-prepared UUIDv7 operation_id before calling so an entirely lost MCP reply is recoverable. Omission generates an ID returned when a reply can be delivered. recover_only with that ID performs GET only: no admission, recording, resumption or renewed reservation authority. Indexed completed, failed, unknown and unattempted outcomes remain distinct; reservations expire at their original checked_at + 300 seconds and journal IDs expire after 24 hours. Never replay an unknown outcome or unattempted suffix automatically, or replace an ID to evade conflicts/expiry. Denials are successful decisions and record attribution unless no_record; retain each recording_retry payload for explicit record_only retry, which only ingests that identical event. Settlement remains separate. All calls share a fixed 30-second work deadline, 1 MiB HTTP response budget and 2 MiB result limit. An admitted request may remain effective after cancellation. Requires a project API key. Submission and record_only require write scope; recover_only GET accepts read-only scope. Uses the key's project, not the selected read project.

Input parameters:

- `checks`: 1–32 ordered check bodies for one durable admission operation; omit entirely for recover_only or record_only. Validate before submission; never automatically replay unknown outcomes.
- `estimated_output_tokens`: Optional output token bound, integer 0–100,000,000, for denial attribution only; does not set the reservation amount or provider generation limit.
- `no_record` (boolean): True skips denial attribution for every item only; checks still run and allowed items may reserve budget.
- `operation_id`: Caller-retained canonical UUIDv7. Prepare before submission to recover a wholly lost reply; expires 24 hours after its encoded creation time. Required for recover_only and record_only.
- `record_only`: Explicit attribution-only retry: exact recording_retry entries from the original result, with the same operation_id, original index and event payload. Omit checks; never regenerates timestamps or ide…
- `recover_only` (boolean): True performs only historical GET using operation_id; omit checks. It never resumes admission, records denial attribution or renews original reservation authority. Read-only key scope is accepted.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `get_overview` (~39 tokens)

Read account overview

Read calendar-month account spend, requests, trend, savings, and free-tier quota metadata. Requires a Solwyn login. Requires a Solwyn login.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `list_cost_events` (~504 tokens)

List cost events

Read cursor-paginated cost events with shared filters and bounded all_pages. Accepts a Solwyn login or a project API key with access to the selected project.

Input parameters:

- `agent_run`: Filter by run_<32 lowercase hex> storage ID or otherwise exact raw caller run name, at most 256 characters.
- `all_pages` (boolean): True follows at most 10 pages within the 30-second/1 MiB response budget, including empty continued pages; limits retain the first unread cursor. False returns one page.
- `cursor`: Opaque cursor from a previous page of the same query; preserve filters and ordering when continuing.
- `failover_reason`: Filter stored costs by failover reason; omit to include all reasons.
- `from_`: Custom window start: timezone-aware ISO timestamp paired with to; the pair overrides time_range.
- `limit` (integer): Maximum events per page, integer 1–100 (default 50); preserve all filters when continuing with the returned cursor.
- `modality`: Filter stored costs by call modality; omit to include all modalities.
- `model`: Filter stored costs by exact served model identifier; omit to include all models.
- `model_fallback`: Filter is_model_fallback; false selects non-fallback calls, null includes both.
- `project_id`: Read project ID; non-empty when supplied. Overrides launch --project, then SOLWYN_PROJECT_ID/config default_project. A key must have access to this project; this never changes the authenticated write…
- `provider`: Filter stored costs by served provider; omit to include all providers.
- `provider_fallback`: Filter is_provider_fallback; false selects non-fallback calls, null includes both.
- `provider_region`: Filter stored costs by served provider region; omit to include all regions.
- `service_tier`: Filter stored costs by served service tier; omit to include all tiers.
- `status`: Filter stored costs by recorded call status; omit to include all statuses.
- `tag`: AND filters as key=value strings; unique keys 1–64 characters, values at most 256, no NUL. Empty values, whitespace and case are preserved.
- `time_range` (string): Preset query window; paired custom start/end timestamps override this preset. Available values are declared by the schema.
- `to`: Custom window end: timezone-aware ISO timestamp paired with from_, strictly later than from_; overrides time_range.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `get_cost_baseline` (~108 tokens)

Get cost baseline

Read committed daily spend baseline excluding today. Accepts a Solwyn login or a project API key with access to the selected project.

Input parameters:

- `days` (integer): Baseline lookback days from 3 through 30, excluding today; defaults to 7.
- `project_id`: Read project ID; non-empty when supplied. Overrides launch --project, then SOLWYN_PROJECT_ID/config default_project. A key must have access to this project; this never changes the authenticated write…

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `get_unit_economics` (~167 tokens)

Get unit economics

Read unit-cost metrics and optional server-inferred causes. Accepts a Solwyn login or a project API key with access to the selected project.

Input parameters:

- `cause` (boolean): Include server-inferred suspected cost drivers when true; no provider payloads are read.
- `project_id`: Read project ID; non-empty when supplied. Overrides launch --project, then SOLWYN_PROJECT_ID/config default_project. A key must have access to this project; this never changes the authenticated write…
- `time_range` (string): Unit-economics preset 7d, 30d or 90d (default 30d); optional vs_prev compares the previous equal-length window.
- `vs_prev` (boolean): Compare unit economics with the previous equal-length window when true.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `get_cost_drift` (~162 tokens)

Get cost drift

Compare historical stored spend and estimates with coverage and caveats. Accepts a Solwyn login or a project API key with access to the selected project.

Input parameters:

- `from_`: Custom window start: timezone-aware ISO timestamp paired with to; the pair overrides time_range.
- `project_id`: Read project ID; non-empty when supplied. Overrides launch --project, then SOLWYN_PROJECT_ID/config default_project. A key must have access to this project; this never changes the authenticated write…
- `time_range` (string): Preset query window; paired custom start/end timestamps override this preset. Available values are declared by the schema.
- `to`: Custom window end: timezone-aware ISO timestamp paired with from_, strictly later than from_; overrides time_range.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `list_priced_models` (~84 tokens)

List priced models

List exact available priced targets and current pricing version. Accepts a Solwyn login or a project API key with access to the selected project.

Input parameters:

- `project_id`: Read project ID; non-empty when supplied. Overrides launch --project, then SOLWYN_PROJECT_ID/config default_project. A key must have access to this project; this never changes the authenticated write…

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `simulate_costs` (~263 tokens)

Simulate costs

Read-only historical repricing; never reserves or bills. 429: one bounded retry. No 503/transport replay. Accepts a Solwyn login or a project API key with access to the selected project.

Input parameters:

- `from_`: Custom window start: timezone-aware ISO timestamp paired with to; the pair overrides time_range.
- `model` (string, required): Exact target model (1–2048 characters) from list_priced_models; Core rejects unavailable or unsupported targets.
- `project_id`: Read project ID; non-empty when supplied. Overrides launch --project, then SOLWYN_PROJECT_ID/config default_project. A key must have access to this project; this never changes the authenticated write…
- `provider` (required): Target priced provider to replay historical usage against, without spending or reserving.
- `region`: Explicit Bedrock target region paired with service_tier; unavailable for other providers.
- `service_tier`: Explicit Bedrock target service tier paired with region; unavailable for other providers.
- `time_range` (string): Preset query window; paired custom start/end timestamps override this preset. Available values are declared by the schema.
- `to`: Custom window end: timezone-aware ISO timestamp paired with from_, strictly later than from_; overrides time_range.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `list_provider_failovers` (~128 tokens)

List provider failovers

Read recent provider/model failover groups, capped by Core at 50 groups. Accepts a Solwyn login or a project API key with access to the selected project.

Input parameters:

- `project_id`: Read project ID; non-empty when supplied. Overrides launch --project, then SOLWYN_PROJECT_ID/config default_project. A key must have access to this project; this never changes the authenticated write…
- `time_range`: Failover aggregation window 24h, 7d or 30d (default 7d); Core returns at most 50 groups, with no cursor.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `list_untracked_surfaces` (~131 tokens)

List untracked surfaces

Read untracked surfaces with effective retention window, capped by Core at 25 observations. Accepts a Solwyn login or a project API key with access to the selected project.

Input parameters:

- `project_id`: Read project ID; non-empty when supplied. Overrides launch --project, then SOLWYN_PROJECT_ID/config default_project. A key must have access to this project; this never changes the authenticated write…
- `time_range`: Untracked observation window 7d, 30d or 90d (default 7d); effective retention is reported and Core returns at most 25 observations.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `list_audit_events` (~154 tokens)

List audit events

Read account audit events newest first with exact action filters and bounded pagination. Requires a Solwyn login.

Input parameters:

- `action`: Exact audit action string of 1–100 characters; omit to include all actions.
- `all_pages` (boolean): True follows at most 10 pages within the 30-second/1 MiB response budget, including empty continued pages; limits retain the first unread cursor. False returns one page.
- `cursor`: Opaque cursor from a previous page of the same query; preserve filters and ordering when continuing.
- `time_range`: Audit window 7d, 30d, 90d or 365d (default 30d); exact action and cursor filters preserve this window.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `plan_status` (~39 tokens)

Plan status

Read current plan limits, capabilities and subscription lifecycle state. Accepts a Solwyn login or a project key with account context; no project selection is required.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `plan_catalog` (~50 tokens)

Plan catalog

Read plan catalog: prices in cents, currency, included requests, decimal cent overage, limits and capabilities. Accepts a Solwyn login or project keys with authenticated user context; no project selection is required.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `get_whoami` (~53 tokens)

Get whoami

Read account identity and email verification; project keys return local key context without a user identity. A Solwyn login reads user/account/project identity; project keys return only local auth and selected-project context without revealing the key.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `get_account_phone` (~33 tokens)

Get account phone

Read user phone verification and SMS consent state. Verification and consent writes stay in the dashboard. Requires a Solwyn login.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `list_alert_activity` (~162 tokens)

List alert activity

Read account-wide activity across all projects plus account scope with delivery receipts. Requires a Solwyn login.

Input parameters:

- `all_pages` (boolean): True follows at most 10 pages within the 30-second/1 MiB response budget, including empty continued pages; limits retain the first unread cursor. False returns one page.
- `cursor`: Opaque cursor from a previous page of the same query; preserve filters and ordering when continuing.
- `event_type`: Exact activity event type: fired, snoozed, unsnoozed, paused or resumed; omit for all events.
- `time_range` (string): Activity preset 7d, 30d or 90d (default 30d); no custom timestamps. Core clamps retained account-wide history.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `list_open_alert_deliveries` (~96 tokens)

List open alert deliveries

Read pending/retrying deliveries and attempts regardless of event retention. Requires a Solwyn login.

Input parameters:

- `all_pages` (boolean): True follows at most 10 pages within the 30-second/1 MiB response budget, including empty continued pages; limits retain the first unread cursor. False returns one page.
- `cursor`: Opaque cursor from a previous page of the same query; preserve filters and ordering when continuing.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `budget_uncounted` (~105 tokens)

Budget uncounted

Read advisory unpriced upper-bound offline traffic, possibly overcounted. A 503 means unknown; retry the read, never assume zero or no past traffic. Accepts a Solwyn login or a project API key with access to the selected project.

Input parameters:

- `project_id`: Read project ID; non-empty when supplied. Overrides launch --project, then SOLWYN_PROJECT_ID/config default_project. A key must have access to this project; this never changes the authenticated write…

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `get_account_alert` (~78 tokens)

Get account alert

Read account spend alert configuration, optionally latest firing and lifecycle history within Core’s 30d retention window. Requires a Solwyn login.

Input parameters:

- `with_last_fired` (boolean): Include latest firing within Core's default 30d retention window; requires a Solwyn login even for project budget rules. Null means no matching history in that window.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `plan_preview` (~114 tokens)

Plan preview

Read a plan-change estimate: immediate proration or scheduling at term end, integer cents, currency and line periods. Never changes a subscription or bills; not a price lock. No 503/transport replay. Requires a Solwyn login at any account role; no selected project required.

Input parameters:

- `interval` (string, required): Target billing interval, month or year. Preview only; does not create a charge.
- `tier` (string, required): Target paid plan tier: production, team or scale. Preview only; does not change the plan.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `list_team_members` (~38 tokens)

List team members

Read the complete active account roster in join order. Any account member may read it; no project selection is required. Requires a Solwyn login.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

### `list_team_invites` (~42 tokens)

List team invites

Read all open account invitations and their delivery status, including expired invitations. Core requires owner/admin role; no project selection is required. Requires a Solwyn login.

Output parameters:

- `data`
- `error`
- `ok` (boolean)
- `recovery`
- `schema` (string)

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Vulnerabilities, Dependencies. The full working is on the page: https://verifymcp.io/servers/ai-solwyn-solwyn/solwyn-cli#diagnostics

## Score history

- 2026-11-05: 59
- 2026-11-04: 59
- 2026-11-03: 58
- 2026-11-02: 43
- 2026-11-01: 57

## Common questions

### What is the Solwyn MCP server?

Solwyn is an MCP server listed in the public MCP registry as ai.solwyn/solwyn. Check budgets before AI spend, record what your code spends and read Solwyn costs. This page covers its PyPI package (solwyn-cli).

### Is the Solwyn MCP server safe to use?

Solwyn scores 59 out of 100 on VerifyMCP. We recorded 4 known advisories against it as of 5 November 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Solwyn MCP server expose?

Solwyn exposes 37 tools: budget_status, budget_check, budget_confirm, get_project_status, get_forecast, and 32 more. Their descriptions and schemas cost roughly 8,353 tokens of context every time the server is loaded.

### Is the Solwyn MCP server still maintained?

Solwyn is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the Solwyn MCP server under?

Solwyn declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- PyPI project: https://pypi.org/project/solwyn-cli/
- Socket report: https://socket.dev/pypi/package/solwyn-cli
- Changelog RSS feed: https://verifymcp.io/servers/ai-solwyn-solwyn/solwyn-cli.xml
- Changelog JSON feed: https://verifymcp.io/servers/ai-solwyn-solwyn/solwyn-cli.json
- HTML version of this page: https://verifymcp.io/servers/ai-solwyn-solwyn/solwyn-cli
