Skip to content

Release 0.10.16: /mcp/apps names no plan, and monitors.alerts - #34

Merged
zealous1 merged 4 commits into
masterfrom
fix/apps-plan-free-and-monitor-alerts
Nov 10, 2026
Merged

zealous1 merged 4 commits into
masterfrom
fix/apps-plan-free-and-monitor-alerts

Conversation

@zealous1

Copy link
Copy Markdown
Member

Why

/mcp/apps is the endpoint app stores list, and store agreements forbid an upsell there. Today its results can carry plan names and upgrade links from the API: a caption-less video says Premium can transcribe it on a paid plan, a gated search filter names the plan that unlocks it, and every gate carries an unlock with an upgrade URL.

Separately, an agent with the MCP server and no API key could not read a monitor's alerts, so a "post my brand's new mentions" job could not start from the monitor.

What

  • src/surface.ts defines how each surface shows what the API says. /mcp passes the API's words and unlocks through, unchanged. /mcp/apps uses fixed plan-free sentences for gated refusals, keeps only the sentences of other refusals and notes that name no plan or link, and drops unlock, freshness, access, gate, details and doc_url.
  • A video YouTube has no record of keeps the API's exact sentence ("YouTube has no video with this id. ...") and gets no caption note, on both paths. Any other transcript_unavailable message becomes the caption-track sentence on /mcp/apps.
  • A search whose results stop before today says which dates it covers, without naming a plan.
  • arcmira.monitors.alerts(monitorId, { limit? }) reads GET /v1/monitors/{id}/alerts, with its line in the describe reference and the monitors rule.

Checks

  • tests/apps-surface.test.ts sends 14 refusals, with today's gate wording, through the four /mcp/apps routes (search, a search filter's name lookup, transcript and feedback). It also checks three search notes and the caption notes. It fails on "Pro", "Pro+", "Premium", "Free", "paid", "upgrade" or "trial", on an unlock key, or on a link other than a YouTube watch link. It also checks each approved sentence and that /mcp keeps its unlock.
  • pnpm test passes 157 of 157. pnpm typecheck, sandbox:check, skill:check and manifest:check (21 client calls against the live API document) pass.

/mcp/apps is the surface app stores list, so its refusals and notes name
no plan, price, offer or upgrade link. Gated refusals get fixed plan-free
sentences, other refusals and notes keep only the sentences that name no
plan or link, and results drop unlock, freshness, access, gate and doc
links. A video YouTube has no record of keeps the API's own sentence and
gets no caption note. /mcp is unchanged.

The program client gains arcmira.monitors.alerts(monitorId, { limit? }),
a read of GET /v1/monitors/{id}/alerts.
A refusal's code on /mcp/apps names no plan: filter_unavailable,
outside_date_range, or not_available. Answers keep only the fields the
tools know. A transcript still being prepared is no longer called
captionless. Retired /mcp tool names are unknown tools on /mcp/apps.
The sentence filter also drops prices, tiers, subscriptions, purchases
and bare links. /mcp keeps its codes, unlocks and field order.

The test now reaches every route, reads plan names inside snake_case
codes, and fails on gate fields and double spaces.
A transcript in the pending state reads "Arcmira is still preparing this
transcript. Read it again in a minute." on /mcp/apps. Any other state
that isn't ready keeps "Arcmira can't return this here."

The plan-free test now also walks the apps tool list and a transcript
answer. The transcript kind arcmira_premium passes only as a source
filter value or a result's source; a sentence naming Premium still fails.
…details

On /mcp/apps the 401 challenge keeps only its plan-free sentences and
carries no unlock, gate or doc link. A result's watch_url must be a
YouTube or Arcmira watch link. A refusal's other fields drop values that
name a plan, price or other link, and a transcript with a state gets no
caption note. A search with no known start date and no match adds no
dates sentence. The sentence filter also drops currencies, per-month
prices, top-ups, seats and sign-ups. The apps feedback description
leaves out its price sentence.

/mcp is unchanged.
@zealous1
zealous1 merged commit 7cab56f into master Nov 10, 2026
1 check passed
@zealous1
zealous1 deleted the fix/apps-plan-free-and-monitor-alerts branch November 10, 2026 23:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant