goose

Open-source agent from Block, shipping as a desktop app and a CLI from one Rust codebase. Uses rmcp as its MCP client, resolved to 3.1.4.

At a glance

Registry id goose
Vendor Block
Category agent-framework
Platforms windows, macos, linux
Licence Apache-2.0
Source https://github.com/aaif-goose/goose
Home https://block.github.io/goose
Wire names goose-desktop, goose-cli
SDK rmcp 3.1.4 · declares 3.0.0 · official Rust SDK · unpatched
Prefers 2026-07-28
Speaks 2025-11-25, 2026-07-28
Source last updated 2026-08-23
Last read 2026-08-23
Probed 1.58.0 (see below)

Capabilities

Capability Status Known by At
Transports
  ↳ stdio ● full read 2026-07-28
  ↳ streamableHttp ● full read 2026-07-28
Authentication — not recorded
Tools ● full declared 2025-03-26
  ↳ listChanged ● full read 2026-07-28
  ↳ result ● full read 2026-07-28
    ↳ content ● full read ⇧ 2026-07-28
    ↳ structuredContent ○ unsupported read ⇧ 2026-07-28
    ↳ audience ● full read ⇧ 2026-07-28
Resources — not recorded
Prompts — not recorded
Completions — not recorded
Sampling ● full read, declared 2025-03-26, 2026-07-28
Elicitation ● full read, declared 2025-03-26, 2026-07-28
  ↳ form ● full read, declared ⇧ 2025-03-26, 2026-07-28
  ↳ url ● full read, declared ⇧ 2025-03-26, 2026-07-28
Roots ● full read 2026-07-28
  ↳ listChanged ● full read ⇧ 2026-07-28
Logging ● full read 2026-07-28
Instructions ● full read 2026-07-28
Icons — not recorded
Tasks — not recorded
JSON Schema — not recorded
Extensions
  ↳ io.modelcontextprotocol/ui ◐ partial read 2026-07-28
Beyond the spec — not recorded

● full ◐ partial ○ unsupported · untested — not recorded ⇧ rests on the parent capability's evidence

Not recorded means nobody has looked, which is not the same claim as unsupported. Under tools.result, full means the field reaches the model on the default conversational path, partial means it does under a condition the notes name, and unsupported means it never does.

What the table flattens

Verified by the probe

39 records from the live probe (probe/), client version 1.58.0. Each row is one run against the instrumented fixture server with the model mocked; the verdict says which fixture fields reached the model. Glyphs: […] content, {…} structuredContent, ⟨…⟩ the whole envelope, "…" a placeholder. The scenario link opens the record; the raw captures sit next to it. Overlay: data/verified/goose.json.

Scenario Config Run At Version Verdict
apps.visibility
app_only default stdio 2026-07-28 1.58.0 tool not offered to the model
app_only anthropic stdio 2026-07-28 1.58.0 tool not offered to the model
tools.result._meta
meta_only default stdio 2026-07-28 1.58.0 […] content only (1x, as text, _meta did not reach the model)
meta_only anthropic stdio 2026-07-28 1.58.0 […] content only (1x, as text, _meta did not reach the model)
meta_only code-mode stdio 2026-07-28 1.58.0 tool not offered to the model
with_meta default stdio 2026-07-28 1.58.0 […] content only (1x, as text, _meta did not reach the model)
with_meta anthropic stdio 2026-07-28 1.58.0 […] content only (1x, as text, _meta did not reach the model)
with_meta code-mode stdio 2026-07-28 1.58.0 tool not offered to the model
tools.result.audience
audience_user default stdio 2026-07-28 1.58.0 […] content only (1x, as text)
audience_user anthropic stdio 2026-07-28 1.58.0 […] content only (1x, as text)
tools.result.content
empty_object default stdio 2026-07-28 1.58.0 "…" no marker reached the model; payload: "The tool call returned the following error:\n-32603: -32603: Unexpected response "
empty_object anthropic stdio 2026-07-28 1.58.0 "…" no marker reached the model; payload: "Error: -32603: -32603: Unexpected response type"
large default stdio 2026-07-28 1.58.0 […] content only (1x, as text)
large anthropic stdio 2026-07-28 1.58.0 […] content only (1x, as text)
no_content_key default stdio 2026-07-28 1.58.0 "…" no marker reached the model; payload: "(empty result)"
no_content_key anthropic stdio 2026-07-28 1.58.0 "…" no marker reached the model; payload: "(empty result)"
tools.result.isError
is_error default stdio 2026-07-28 1.58.0 […] content only (1x, as text)
is_error anthropic stdio 2026-07-28 1.58.0 […] content only (1x, as text)
tools.result.media
with_image default stdio 2026-07-28 1.58.0 […] content only (1x, as text)
with_image anthropic stdio 2026-07-28 1.58.0 […] content only (1x, as blocks)
tools.result.outputSchema
schema_match default stdio 2026-07-28 1.58.0 […] content only (1x, as text)
schema_match anthropic stdio 2026-07-28 1.58.0 […] content only (1x, as text)
schema_mismatch default stdio 2026-07-28 1.58.0 […] content only (1x, as text)
schema_mismatch anthropic stdio 2026-07-28 1.58.0 […] content only (1x, as text)
tools.result.structuredContent
mirror default http 2026-07-28 1.58.0 payload once (as json)
mirror default stdio 2026-07-28 1.58.0 payload once (as json)
mirror anthropic stdio 2026-07-28 1.58.0 payload once (as json)
sc_empty default stdio 2026-07-28 1.58.0 […] content only (1x, as text)
sc_empty anthropic stdio 2026-07-28 1.58.0 […] content only (1x, as text)
sc_null default stdio 2026-07-28 1.58.0 […] content only (1x, as text)
sc_null anthropic stdio 2026-07-28 1.58.0 […] content only (1x, as text)
sc_string default stdio 2026-07-28 1.58.0 […] content only (1x, as text)
sc_string anthropic stdio 2026-07-28 1.58.0 […] content only (1x, as text)
structured_only default http 2026-07-28 1.58.0 "…" no marker reached the model; payload: "(empty result)"
structured_only default stdio 2026-07-28 1.58.0 "…" no marker reached the model; payload: "(empty result)"
structured_only anthropic stdio 2026-07-28 1.58.0 "…" no marker reached the model; payload: "(empty result)"
summary_and_data default http 2026-07-28 1.58.0 […] content only (1x, as text)
summary_and_data default stdio 2026-07-28 1.58.0 […] content only (1x, as text)
summary_and_data anthropic stdio 2026-07-28 1.58.0 […] content only (1x, as text)

Where the evidence disagrees

Research notes

Provenance

Read at c5e5929a on 2026-08-23, from main of https://github.com/aaif-goose/goose.git. That commit was authored 2026-08-23.

SDK. The workspace declares rmcp "3.0.0" as a caret requirement and the lockfile resolves it to 3.1.4, so behavioural claims cite 3.1.4. The lockfile also holds rmcp 1.8.0, pulled in by the pctx_code_execution_runtime, pctx_config and pctx_registry crates; that copy is unrelated to goose's own MCP client. [patch.crates-io] exists but covers agent-client-protocol, v8 and cudaforge, not rmcp. goose names ProtocolVersion::V_2026_07_28 itself rather than inheriting a version from rmcp, using rmcp's ProtocolVersion::LATEST only as the legacy fallback.

Paths read:

Source is not vendored. To reproduce any claim above, check out that commit in the client's repository.


Generated from data/clients.json, data/verified/goose.json by scripts/build-cards.js. Edit the registry, rerun the probe or the ingest, not this file.