# io.github.speedofred/ami-survey (pypi · ami-survey)

Measures the cost, tokens and duration of a completed agent workflow from its session log.

- Trust score: 72/100 (medium)
- Change this week: +5
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-21

## Components

- pypi · `ami-survey`: 72/100 (this document), [markdown](https://verifymcp.io/servers/speedofred-ami-survey/ami-survey.md), [page](https://verifymcp.io/servers/speedofred-ami-survey/ami-survey)

## Channel facts

- Registry: `pypi`
- Package: `ami-survey`
- Version: `1.2.0`
- 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-09-21.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it.
  - No production dependencies, so there is no dependency health to assess.
- **Provenance & Transparency**: 32/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - License check failed: no license is declared.
  - Actively maintained (last published 11 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 73/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 1864 tokens (~133/item across 14 items; 14 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 40/100
  - Stability observed for 12 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 91/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 73% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 14 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 15 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the io.github.speedofred/ami-survey MCP server?

io.github.speedofred/ami-survey runs locally as a PyPI package, launched with uvx ami-survey. 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 speedofred-ami-survey -- uvx ami-survey
```

### Cursor

```json
{
  "mcpServers": {
    "speedofred-ami-survey": {
      "command": "uvx",
      "args": [
        "ami-survey"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "speedofred-ami-survey": {
      "command": "uvx",
      "args": [
        "ami-survey"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add speedofred-ami-survey -- uvx ami-survey
```

### opencode

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

### OpenClaw

```bash
openclaw mcp add speedofred-ami-survey --command uvx --arg ami-survey
```

### Hermes

```yaml
mcp_servers:
  speedofred-ami-survey:
    command: "uvx"
    args: ["ami-survey"]
```

### Netclaw

```json
{
  "McpServers": {
    "speedofred-ami-survey": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "ami-survey"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add speedofred-ami-survey -t stdio -c uvx -a ami-survey
```

### Other

```json
{
  "mcpServers": {
    "speedofred-ami-survey": {
      "command": "uvx",
      "args": [
        "ami-survey"
      ]
    }
  }
}
```

## 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-09-20 (score 72, +1)

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

### 2026-09-17 (score 71, +4)

- [functional improvement] Stability: unverified → 0.27

### 2026-09-09 (score 67)

First indexed and scored.

## MCP tools (14)

### `ami_survey_begin` (~399 tokens)

Open an AMI survey for the workflow you have just completed. Detects the runtime, session and measurement window automatically, and adopts any stage markers you buffered with ami_mark_stage while working. Call this FIRST, after the workflow's real work is finished, so the survey's own token spend is excluded from the measurements.

Input parameters:

- `adapter` (string): Force a telemetry adapter instead of detecting the runtime. Rarely needed.
- `cwd` (string): Optional working-directory override.
- `session_id` (string): Optional session id override.
- `transcript_path` (string): Optional explicit transcript path override.
- `work_unit` (string): Optional, but declare it together with work_unit_count. The countable thing this workflow handled: 'ticket', 'CV', 'support email'. It is what cost and duration get divided by, so a workflow that did…
- `work_unit_count` (integer): Optional, but declare it together with work_unit. How many work units this run actually handled - a whole number you can point at in the output, not an estimate.
- `workflow_category` (string): Optional. The workflow's category, from ami_get_workflow_categories. Decides which other workflows this run is compared against; an undeclared workflow is only ever compared against itself. Take it f…
- `workflow_description` (string, required): 1-3 sentences: what the workflow was given and what business work it produced. Minimum 20 characters.
- `workflow_end_time` (string): Optional ISO-8601 override for when the workflow ended.
- `workflow_name` (string, required): Short reusable label for the workflow, e.g. 'Support Ticket Triage & Response'.
- `workflow_start_time` (string): Optional ISO-8601 override for when the workflow began. Defaults to the first human turn of this session.

### `ami_collect_telemetry` (~175 tokens)

Measure the workflow run: detects which agent runtime you are in, reads that runtime's own call records (token usage, model, timings reported by the provider), attributes each call to a stage or observed execution phase, and stores the result on the run. Returns the collected inventory fields. Use these numbers verbatim. If your runtime has no adapter, this says so and you should use ami_record_calls instead.

Input parameters:

- `adapter` (string): Force a telemetry adapter instead of detecting the runtime. Rarely needed.
- `cwd` (string)
- `run_id` (string): Defaults to the active run.
- `session_id` (string)
- `transcript_path` (string)
- `window_end` (string): ISO-8601 override.
- `window_start` (string): ISO-8601 override.

### `ami_record_calls` (~120 tokens)

Telemetry entry point for agents NOT running in Claude Code. Post the provider-reported usage for each API call the workflow made. Every record needs model, start_time, end_time, input_tokens, output_tokens - values read from real API responses, never estimated.

Input parameters:

- `adapter` (string): Name of the runtime/SDK the records came from.
- `calls` (array, required): Call records.
- `replace` (boolean)
- `run_id` (string)
- `runtime_metadata` (object): e.g. {platform, runtime, version}.

### `ami_mark_stage` (~255 tokens)

Declare the workflow stage you are entering, e.g. 'Classify Severity' or 'Draft Customer Reply'. Call it as you move through the workflow to get a declared-stage Agent Effort Profile; without markers the profile falls back to AMI-observed execution phases. No survey run is needed first: markers emitted before ami_survey_begin are buffered with the timestamp you emitted them at and attached to the run when it opens. When the last stage is done, call once more with closes=true - each marker ends the stage before it, so without a closing one the final stage runs to the end of the measurement window and absorbs everything you do afterwards.

Input parameters:

- `closes` (boolean): True to end declared work rather than start a stage. Call this when the final stage is complete, before you verify output or report back; work after it is attributed to observed phases instead of to…
- `cwd` (string): Optional workspace override; buffered markers are adopted by a run opened in the same workspace.
- `marked_at` (string): ISO-8601; defaults to now.
- `note` (string)
- `run_id` (string)
- `stage` (string): Name of the stage being entered.

### `ami_get_grading_scale` (~40 tokens)

Return the AMI output-quality grading scale. Read this before grading: agent_output_grade must be one of its codes and is validated on submit.

### `ami_get_workflow_categories` (~50 tokens)

The workflow categories a run may declare itself into, and what each one covers. A category decides which other workflows this run is compared against, so read the list rather than inventing a label.

### `ami_get_scorecard` (~96 tokens)

The scorecard for a submitted run: the AMI Maturity Index, the Performance Score, the five pillars, and structured findings. Every number and finding is computed from the run's own data - the server calls no model. If a human wants this read back as prose, write it yourself from narration_brief.findings, following the instructions there.

Input parameters:

- `run_id` (string): Defaults to the run you just submitted.

### `ami_write_findings` (~224 tokens)

Write the judgement sections of a run's scorecard. The server computes every number and the three sections that follow from them; these four are readings of the work that no arithmetic produces, so they are yours to write. Call ami_get_scorecard first and use narration_brief.sections_awaiting_you - it carries the brief for each. Ground every sentence in the run's own evidence; do not invent industry context you were not given.

Input parameters:

- `industry_next_step` (string): One thing the business should decide or standardise.
- `industry_opportunity` (string): What this workflow being agent-run means commercially. Say so plainly if you were given no industry context.
- `key_finding` (string): Optional. Overrides the derived summary if you have read the output and know better than the arithmetic does.
- `run_id` (string, required): The submitted run.
- `workflow_next_step` (string): One concrete change, specific enough to act on this week.
- `workflow_opportunity` (string): The single biggest improvement available to this workflow. Name the stage.

### `ami_get_instructions` (~94 tokens)

Return the AMI survey procedure as markdown. Call this FIRST if your harness has no skill mechanism that already gave you the procedure - it tells you the call order and, for your runtime, how telemetry is obtained. Claude Code agents already have it as a skill and do not need this.

Input parameters:

- `runtime` (string): Your runtime. 'mcp' (default) for any MCP client that is not Claude Code.

### `ami_get_survey` (~37 tokens)

Return the survey definition: every field from Collection_Inventory.csv, how each one is obtained, and which ones you must answer yourself.

### `ami_survey_status` (~41 tokens)

Show the current values collected for the active run, which inventory fields are still empty, and what is blocking submission.

Input parameters:

- `run_id` (string)

### `ami_submit_survey` (~213 tokens)

Submit and persist the survey. Requires a grade from the AMI grading scale, a justification, and evidence (the concrete artifacts produced). Writes JSON + Markdown + a CSV index row to disk and returns the paths.

Input parameters:

- `agent_output_grade` (string, required): A grade code from ami_get_grading_scale.
- `allow_empty_telemetry` (boolean): Only for deliberately unmeasured runs; measurement fields will be null.
- `grade_evidence` (array, required): Concrete artifacts being graded: file paths, ticket ids, message ids, tool outputs.
- `grade_justification` (string, required): Why that grade, measured against the workflow's stated requirements. At least 40 characters.
- `grader` (string): 'self' when the agent grades its own output, 'human' or 'external_reviewer' when a person supplied the grade.
- `run_id` (string)
- `workflow_description` (string)
- `workflow_end_time` (string)
- `workflow_name` (string)

### `ami_get_report` (~49 tokens)

Render the human-readable Markdown report for a run (defaults to the active run). With no run and no active run, returns the index of all submitted surveys.

Input parameters:

- `run_id` (string)

### `ami_list_surveys` (~21 tokens)

List all submitted survey responses and where they are stored.

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/speedofred-ami-survey/ami-survey#diagnostics

## Score history

- 2026-09-21: 72
- 2026-09-20: 72
- 2026-09-19: 71
- 2026-09-18: 71
- 2026-09-17: 71
- 2026-09-16: 67
- 2026-09-15: 67
- 2026-09-14: 67
- 2026-09-13: 67
- 2026-09-12: 67
- 2026-09-11: 67
- 2026-09-10: 67
- 2026-09-09: 67

## Common questions

### What is the io.github.speedofred/ami-survey MCP server?

io.github.speedofred/ami-survey is an MCP server listed in the public MCP registry as io.github.speedofred/ami-survey. Measures the cost, tokens and duration of a completed agent workflow from its session log. This page covers its PyPI package (ami-survey).

### Is the io.github.speedofred/ami-survey MCP server safe to use?

io.github.speedofred/ami-survey scores 72 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 21 September 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 io.github.speedofred/ami-survey MCP server expose?

io.github.speedofred/ami-survey exposes 14 tools: ami_survey_begin, ami_collect_telemetry, ami_record_calls, ami_mark_stage, ami_get_grading_scale, and 9 more. Their descriptions and schemas cost roughly 1,814 tokens of context every time the server is loaded.

### Is the io.github.speedofred/ami-survey MCP server still maintained?

io.github.speedofred/ami-survey is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- PyPI project: https://pypi.org/project/ami-survey/
- Socket report: https://socket.dev/pypi/package/ami-survey
- Repository: https://github.com/speedofred/ami-survey-client-v1
- Website: https://agentbenchmark.dev/
- Changelog RSS feed: https://verifymcp.io/servers/speedofred-ami-survey/ami-survey.xml
- Changelog JSON feed: https://verifymcp.io/servers/speedofred-ami-survey/ami-survey.json
- HTML version of this page: https://verifymcp.io/servers/speedofred-ami-survey/ami-survey
