Skip to content

Bring in mcp-* crates from goose as a starting point#1

Merged
alexhancock merged 3 commits into
mainfrom
alexhancock/rust-sdk-init
Feb 21, 2025
Merged

Bring in mcp-* crates from goose as a starting point#1
alexhancock merged 3 commits into
mainfrom
alexhancock/rust-sdk-init

Conversation

@alexhancock

@alexhancock alexhancock commented Feb 20, 2025

Copy link
Copy Markdown
Contributor

Initialize rust SDK with mcp-* crates from https://github.com/block/goose/tree/main/crates

@salman1993
@kalvinnchau

wrote much of this code, and @Jeadie also made a contribution before it moved from the goose repo here

@alexhancock
alexhancock requested review from baxen, dsp-ant and jspahrsummers and removed request for baxen, dsp-ant and jspahrsummers February 20, 2025 18:19
Comment thread crates/mcp-client/Cargo.toml Outdated
Comment on lines +3 to +4
version = "0.1.0"
edition = "2021"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should probably

Suggested change
version = "0.1.0"
edition = "2021"
version.workspace = true
edition.workspace = true

Comment thread crates/mcp-client/Cargo.toml Outdated
edition = "2021"

[dependencies]
mcp-core = { path = "../mcp-core" }

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I personally prefer having internal crates be workspace dependency, so in the workspace Cargo.toml you'd define it as a dependency

[workspace.dependencies]
mcp-core = { path = "./mcp-core" }

and then use it here:

Suggested change
mcp-core = { path = "../mcp-core" }
mcp-core = { workspace = true }

@alexhancock
alexhancock merged commit fe1108c into main Feb 21, 2025
@alexhancock
alexhancock deleted the alexhancock/rust-sdk-init branch February 21, 2025 02:18
takumi-earth pushed a commit to earthlings-dev/rmcp that referenced this pull request Jan 27, 2026
…lexhancock/rust-sdk-init

Bring in mcp-* crates from goose as a starting point
branben pushed a commit to branben/rust-sdk that referenced this pull request Jun 29, 2026
…urns Result

- Add strip_output() that strips title/description without validating type (Dale modelcontextprotocol#1)
- Change schema_for_output to return Arc<JsonObject> instead of Result (Dale modelcontextprotocol#2)
- Cache only Arc<JsonObject> success values, not Result (Dale modelcontextprotocol#3)
- Remove dead unwrap_or_else panic paths in with_output_schema, ToolBase, and macros
- Tighten test assertions from contains to assert_eq on type field (Dale modelcontextprotocol#4)
- Update test_schema_for_output_rejects_primitive to accept_primitive (SEP-2106)

Co-authored-by: Orca <help@stably.ai>
branben pushed a commit to branben/rust-sdk that referenced this pull request Jun 29, 2026
…urns Result

- Add strip_output() that strips title/description without validating type (Dale modelcontextprotocol#1)
- Change schema_for_output to return Arc<JsonObject> instead of Result (Dale modelcontextprotocol#2)
- Cache only Arc<JsonObject> success values, not Result (Dale modelcontextprotocol#3)
- Remove dead unwrap_or_else panic paths in with_output_schema, ToolBase, and macros
- Tighten test assertions from contains to assert_eq on type field (Dale modelcontextprotocol#4)
- Update test_schema_for_output_rejects_primitive to accept_primitive (SEP-2106)

Co-authored-by: Orca <help@stably.ai>
DaleSeo pushed a commit that referenced this pull request Jul 8, 2026
…2106) (#895)

* fix: address PR review - schema_for_output no longer validates or returns Result

- Add strip_output() that strips title/description without validating type (Dale #1)
- Change schema_for_output to return Arc<JsonObject> instead of Result (Dale #2)
- Cache only Arc<JsonObject> success values, not Result (Dale #3)
- Remove dead unwrap_or_else panic paths in with_output_schema, ToolBase, and macros
- Tighten test assertions from contains to assert_eq on type field (Dale #4)
- Update test_schema_for_output_rejects_primitive to accept_primitive (SEP-2106)

Co-authored-by: Orca <help@stably.ai>

* test(rmcp): add non-object output schema tests for SEP-2106

Add tests verifying schema_for_output accepts non-object types:
- test_tool_builder_methods: primitive (i32), array (Vec<String>), option
- test_structured_output: tool returning Json<Vec<T>> and Json<i32>
- test_json_schema_detection: Json<Vec<T>>, Result<Json<Vec<T>>,E>, Json<String>
- tool_traits: ToolBase::output_schema with Vec<AddOutput> output type

* test(rmcp): add missing edge case tests from code review

Add tests identified during code review:
- description stripping for primitive types
- composition types (Option<String> with anyOf/oneOf/null)
- cache correctness (Arc::ptr_eq for repeated calls)
- schema_for_input rejecting array types (not just primitives)
- schema_for_output accepting unit type ()

* feat!: mark schema_for_output return-type change as breaking

This introduces SEP-2106: schema_for_output no longer validates or
returns Result. The public signature changed, so bump major.

* fix: address Dale's PR review - direct schema.get assertions, remove ArrayTool

- Replace loose schema_str.contains(...) assertions with direct
  schema.get("type") equality checks in test_tool_builder_methods.rs
  and test_structured_output.rs
- Remove redundant ArrayTool fixture and its round-trip
  serde_json::from_str test from tool_traits.rs since schema is
  already Arc<JsonObject>
- Drop dead schema_str variable in test_structured_output.rs

---------

Co-authored-by: Brandon Bennett <brandonbennett@macbookair.myfiosgateway.com>
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Brandon Bennett <brandonbennett@Pursuits-Air.lan>
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.

2 participants