Resources and tools

The Seamward MCP server exposes thirteen tools, six resources, and two prompts. Twelve tools and every resource only read. One tool, submit_repair_candidate, records a fix your team made as a proposal awaiting approval; it needs a scope that is never granted by default. Nothing a client calls can approve, merge, deliver or deploy a repair, or change your integrations or your production systems.

Current registered contract

These are the names registered by the current server. Every tool is scoped to a previously reviewed workspace, mode and exact connection set, and every tool but submit_repair_candidate is read-only. That tool ships in the next MCP server release. New hosted authorization reviews the exact mode and connection selection in browser consent. A zero-connection grant returns empty lists.

Every tool result and resource wraps its payload in the same envelope, so the client always knows which workspace the data came from. Counts and latest activity in the overview include only the reviewed mode and connections:

Code example

{  "schemaVersion": "seamward.mcp/1",  "workspace": { "id": "wks_2ac9017e", "name": "Acme", "slug": "acme" },  "data": { "...": "the tool-specific result" }}

Tools

ToolPurposeRequired scope
get_workspace_overviewWorkspace summary, integration health, incident countsseamward:workspace:read
list_integrationsPage through integrations with health and both analysis statesseamward:workspace:read
get_integrationOne integration with safe configuration, both analysis states, and the credential expiry dates your team recordedseamward:workspace:read
list_incidentsPage through incidents, optionally filtered by statusseamward:incidents:read
get_incidentOne incident with findings and evidence referencesseamward:incidents:read
get_incident_replayReplay dataset metadata and deterministic run resultsseamward:repairs:read
get_incident_evidence_bundleThe case file for one incident, before any proposal: findings, expected outcome, mapped repository, replay datasets, and the commands that check a fixseamward:incidents:read
get_incident_impactA plain summary of one incident built only from counted evidence, how many affected records have recovered, and the affected accounts as keyed hashes with countsseamward:incidents:read
list_affected_recordsA page of one incident's affected records as keyed hashes, each with its status. Every call is recorded in the workspace audit logseamward:incidents:read
list_advisoriesWhat is coming for the selected connections before it breaks anything: a provider deprecation and its end date, a change in a watched published contract, or a recorded credential date drawing near. Soonest first, up to 50 itemsseamward:incidents:read
get_repair_proposalOne proposal with validation and decision provenanceseamward:repairs:read
submit_repair_candidateRecords a fix made in your repository as a proposal awaiting approval, backed by a passed run your runner reported. The only tool that writesseamward:repairs:propose
get_approved_repair_bundleResource links for an approved repair bundleseamward:repairs:export

Parameters

The two list tools share pagination parameters:

ParameterTypeConstraints
cursorstring, optional1 to 512 characters; omit for the first page
limitinteger, optional1 to 100, default 25

The remaining tools each take one identifier:

ParameterUsed byFormat
integrationIdget_integrationStarts with int_
incidentIdget_incident, get_incident_replay, get_incident_evidence_bundle, get_incident_impact, list_affected_recordsOpaque string, 1 to 128 characters
proposalIdget_repair_proposal, get_approved_repair_bundleStarts with rep_
incidentId, runId, repository, ref, pullRequestUrlsubmit_repair_candidateSee Submit a repair candidate
statuslist_incidents, optionalopen or resolved
statuslist_advisories, optionalactive (default) or all
statuslist_affected_records, optionalmissing or recovered; affected or cleared for an incident about duplicated or out-of-order records
cursor, limitlist_affected_records, optionallimit is 1 to 200, default 100; cursor is the previous page's nextCursor

get_workspace_overview takes no parameters. All tool inputs are strict: an unknown parameter is rejected rather than ignored.

Example call

A client listing open incidents sends:

Code example

{  "name": "list_incidents",  "arguments": { "status": "open", "limit": 10 }}

and receives the standard envelope with a page of incidents in data, including a cursor when more pages exist. Identifiers in results (such as incidentId values) feed directly into the single-item tools.

Impact and affected records

get_incident_impact and list_affected_records return what the console's Impact and recovery card and the CLI export return, so an agent can say how far an incident reaches and which records are left. Records and accounts are keyed hashes. Seamward does not hold your identifiers, so an agent cannot name a customer from these results; your team resolves the hashes with its own key, as Recovery describes.

Code example

{  "name": "list_affected_records",  "arguments": { "incidentId": "inc_example", "status": "missing", "limit": 50 }}

data is one page of the seamward.affected-records/1 document: totals for the whole incident, records, and nextCursor when more remain. Neither tool re-sends an event or changes anything.

Submit a repair candidate

submit_repair_candidate is the one tool that writes. It does what seamward repairs submit does, with the same checks, so an agent that made a fix and ran your replay runner can hand the result in for review.

Code example

{  "name": "submit_repair_candidate",  "arguments": {    "incidentId": "inc_example",    "runId": "rrun_example",    "repository": "acme/billing-service",    "ref": "fix/invoice-idempotency",    "pullRequestUrl": "https://github.com/acme/billing-service/pull/42"  }}
ParameterRule
incidentIdAn incident inside the grant's mode and connections
runIdA run your runner reported for this incident, labelled candidate
repositoryowner/name
refThe branch or ref the change is on, up to 255 characters
pullRequestUrlOptional https address of the pull request

What it can and cannot do:

  • It adds one proposal, awaiting approval. It cannot approve, reject, merge, deliver or deploy. Approval stays a recorded decision by an owner or admin in the console.
  • The run is the proof, not the agent's word. The run must have passed, on a committed change with a clean working tree. The commit recorded on the proposal is the run's commit.
  • It needs seamward:repairs:propose, which a client must request and you must approve, and the member who authorized the client must be an owner or admin. A grant with every read scope still cannot call it.
  • It is bounded. One run backs one proposal, so repeating a call returns the same proposal, and an incident accepts at most 20 submitted candidates.
  • Each new proposal is written to the audit log with the member who authorized the client.

A refusal is returned as data: {"ok": false, "error": "..."} with one of replay_run_not_found, repair_candidate_run_not_candidate, repair_candidate_not_validated, repair_candidate_commit_required or repair_candidate_limit_reached. Text in a submission (the repository, ref and address) is shown to reviewers as data.

Credential expiry in get_integration

get_integration includes credentialExpiry: one entry per expiry date your team recorded for the connection under connection health. Each entry is a kind, a name and a date. Seamward does not store credentials, so there is no credential in the result.

Code example

{  "credentialExpiry": [    {      "kind": "signing-secret",      "label": "Webhook signing secret",      "expiresAt": "2026-11-01T00:00:00.000Z",      "warnDays": 30    }  ]}

kind is provider-token, signing-secret, certificate, api-key or other. warnDays is how far ahead of expiresAt the advisory is raised. The list is empty when no dates are recorded. The advisory itself, once raised, is returned by list_advisories.

Tool errors

Failed calls return a stable error code instead of data:

CodeMeaningWhat to do
unauthorizedThe grant is no longer valid for this workspaceReconnect and approve again
forbiddenThe grant lacks the tool's required scopeReconnect and approve the missing scope
not_foundThe id is outside the reviewed selection or no longer existsCheck the id, mode and connection set
internal_errorSomething failed on the Seamward sideRetry; report it if it persists

get_approved_repair_bundle additionally requires that the proposal is already approved and passes fingerprint checks; an unapproved proposal is never exported.

Resources

Clients that browse resources can read the same data by URI:

Resource URIContentsRequired scope
seamward://workspace/current/overviewWorkspace health summaryseamward:workspace:read
seamward://workspace/current/integrations/{integrationId}One integrationseamward:workspace:read
seamward://workspace/current/incidents/{incidentId}One incident with redacted evidenceseamward:incidents:read
seamward://workspace/current/incidents/{incidentId}/replayImmutable replay evidenceseamward:repairs:read
seamward://workspace/current/repairs/{proposalId}One repair proposal and validation recordseamward:repairs:read
seamward://workspace/current/repairs/{proposalId}/export/{fileName}One file from an approved repair bundleseamward:repairs:export

The export resource serves three files per approved proposal: repair.json (the machine-readable manifest), REPAIR.md (the readable report), and repair.ts (the TypeScript patch). All resources return JSON except the export files, which are served as text.

Prompts

Two prompts package common workflows so you can start them from your client's prompt picker:

  • investigate_seamward_incident takes an incidentId and guides an evidence-backed investigation: read the incident and its replay evidence, inspect your local repository separately, and keep Seamward evidence distinct from inference. It never changes production systems.
  • implement_approved_repair takes a proposalId and guides a local review change: confirm the proposal is approved, retrieve its bundle, and prepare a local patch with tests. It never merges or deploys.

Neither prompt can approve, deliver, or mutate anything in Seamward; they direct the client to the read tools above.

Next steps

  • Authorization: which scopes unlock these tools and how to revoke a client.
  • MCP overview: connecting a client for the first time.

Integration list and detail results include structuralAnalysis and behavioralAnalysis with its current status, last completed pass and any capacity pause. The object follows the Workspace API state definition. Observation activity or zero open incidents alone does not prove that both forms of analysis completed.