diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 976a1910..68df864b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -39,10 +39,36 @@ jobs: # Remove 'v' prefix for version number VERSION="${VERSION_TAG#v}" + # Extract base version (X.Y.Z) for gopher-orch download + # Handles both X.Y.Z and X.Y.Z.E formats + if echo "$VERSION" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$'; then + # Extended version X.Y.Z.E -> base is X.Y.Z + BASE_VERSION=$(echo "$VERSION" | sed -E 's/^([0-9]+\.[0-9]+\.[0-9]+)\.[0-9]+$/\1/') + else + # Standard version X.Y.Z + BASE_VERSION="$VERSION" + fi + echo "version_tag=${VERSION_TAG}" >> $GITHUB_OUTPUT echo "version=${VERSION}" >> $GITHUB_OUTPUT + echo "base_version=${BASE_VERSION}" >> $GITHUB_OUTPUT + echo "base_version_tag=v${BASE_VERSION}" >> $GITHUB_OUTPUT echo "Version Tag: ${VERSION_TAG}" echo "Version: ${VERSION}" + echo "Base Version: ${BASE_VERSION} (for gopher-orch download)" + + - name: Push tag to remote + run: | + VERSION_TAG="${{ steps.version.outputs.version_tag }}" + + # Check if tag exists on remote + if git ls-remote --tags origin | grep -q "refs/tags/${VERSION_TAG}$"; then + echo "Tag ${VERSION_TAG} already exists on remote" + else + echo "Pushing tag ${VERSION_TAG} to remote..." + git push origin "${VERSION_TAG}" + echo "Tag pushed successfully" + fi - name: Check if release already exists id: check_release @@ -62,19 +88,21 @@ jobs: env: GH_TOKEN: ${{ secrets.GOPHER_ORCH_TOKEN }} run: | - echo "Downloading native binaries for ${{ steps.version.outputs.version_tag }}..." + # Use base version for gopher-orch (X.Y.Z even if SDK is X.Y.Z.E) + ORCH_TAG="${{ steps.version.outputs.base_version_tag }}" + echo "Downloading native binaries from gopher-orch ${ORCH_TAG}..." mkdir -p downloads # Download all platform binaries from gopher-orch release - gh release download ${{ steps.version.outputs.version_tag }} \ + gh release download "${ORCH_TAG}" \ -R GopherSecurity/gopher-orch \ -D downloads \ -p "libgopher-orch-*.tar.gz" \ -p "libgopher-orch-*.zip" || { echo "Warning: Could not download some binaries" echo "Available assets:" - gh release view ${{ steps.version.outputs.version_tag }} -R GopherSecurity/gopher-orch --json assets -q '.assets[].name' + gh release view "${ORCH_TAG}" -R GopherSecurity/gopher-orch --json assets -q '.assets[].name' } echo "Downloaded files:" @@ -113,20 +141,20 @@ jobs: \`\`\`toml # Add to Cargo.toml [dependencies] - gopher-orch = "${VERSION}" + gopher-mcp-rust = "${VERSION}" \`\`\` Or via cargo: \`\`\`bash - cargo add gopher-orch@${VERSION} + cargo add gopher-mcp-rust@${VERSION} \`\`\` #### From GitHub \`\`\`toml [dependencies] - gopher-orch = { git = "https://github.com/GopherSecurity/gopher-mcp-rust.git", tag = "${VERSION_TAG}" } + gopher-mcp-rust = { git = "https://github.com/GopherSecurity/gopher-mcp-rust.git", tag = "${VERSION_TAG}" } \`\`\` ### Native Library Installation @@ -222,8 +250,7 @@ jobs: needs: release runs-on: ubuntu-latest if: | - needs.release.outputs.release_created == 'true' && - (vars.PUBLISH_CRATES == 'true' || github.event.head_commit.message contains '[publish]') + vars.PUBLISH_CRATES == 'true' || contains(github.event.head_commit.message, '[publish]') steps: - name: Checkout uses: actions/checkout@v4 @@ -260,8 +287,8 @@ jobs: echo "## crates.io Publish Summary" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "- **Version:** ${{ needs.release.outputs.version }}" >> $GITHUB_STEP_SUMMARY - echo "- **crates.io:** https://crates.io/crates/gopher-orch/${{ needs.release.outputs.version }}" >> $GITHUB_STEP_SUMMARY - echo "- **docs.rs:** https://docs.rs/gopher-orch/${{ needs.release.outputs.version }}" >> $GITHUB_STEP_SUMMARY + echo "- **crates.io:** https://crates.io/crates/gopher-mcp-rust/${{ needs.release.outputs.version }}" >> $GITHUB_STEP_SUMMARY + echo "- **docs.rs:** https://docs.rs/gopher-mcp-rust/${{ needs.release.outputs.version }}" >> $GITHUB_STEP_SUMMARY test: name: Run Tests diff --git a/CHANGELOG.md b/CHANGELOG.md index 68e2da72..da223715 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,28 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.1.2.11] - 2026-03-22 + +## [0.1.2.10] - 2026-03-21 + +## [0.1.2.9] - 2026-03-21 + +## [0.1.2.8] - 2026-03-21 + +## [0.1.2.7] - 2026-03-21 + +## [0.1.2.6] - 2026-03-21 + +## [0.1.2.5] - 2026-03-21 + +## [0.1.2.4] - 2026-03-21 + +## [0.1.2.3] - 2026-03-21 + +## [0.1.2.1] - 2026-03-21 + +## [0.1.2] - 2026-03-20 + ### Added - Initial release of gopher-mcp-rust SDK - Rust bindings for gopher-orch native library via FFI @@ -21,6 +43,28 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `default` - Core functionality without auth - `auth` - OAuth 2.0 token validation via native library + + + + + + + + + + + --- -[Unreleased]: https://github.com/GopherSecurity/gopher-mcp-rust/compare/HEAD +[Unreleased]: https://github.com/GopherSecurity/gopher-mcp-rust/compare/v0.1.2.11...HEAD +[0.1.2.11]: https://github.com/GopherSecurity/gopher-mcp-rust/compare/v0.1.2.10...v0.1.2.11 +[0.1.2.10]: https://github.com/GopherSecurity/gopher-mcp-rust/compare/v0.1.2.9...v0.1.2.10 +[0.1.2.9]: https://github.com/GopherSecurity/gopher-mcp-rust/compare/v0.1.2.8...v0.1.2.9 +[0.1.2.8]: https://github.com/GopherSecurity/gopher-mcp-rust/compare/v0.1.2.7...v0.1.2.8 +[0.1.2.7]: https://github.com/GopherSecurity/gopher-mcp-rust/compare/v0.1.2.6...v0.1.2.7 +[0.1.2.6]: https://github.com/GopherSecurity/gopher-mcp-rust/compare/v0.1.2.5...v0.1.2.6 +[0.1.2.5]: https://github.com/GopherSecurity/gopher-mcp-rust/compare/v0.1.2.4...v0.1.2.5 +[0.1.2.4]: https://github.com/GopherSecurity/gopher-mcp-rust/compare/v0.1.2.3...v0.1.2.4 +[0.1.2.3]: https://github.com/GopherSecurity/gopher-mcp-rust/compare/v0.1.2.1...v0.1.2.3 +[0.1.2.1]: https://github.com/GopherSecurity/gopher-mcp-rust/compare/v0.1.2...v0.1.2.1 +[0.1.2]: https://github.com/GopherSecurity/gopher-mcp-rust/releases/tag/v0.1.2 diff --git a/Cargo.toml b/Cargo.toml index fe5901e1..0c70f006 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher-mcp-rust" -version = "0.1.2-9" +version = "0.1.2-11" edition = "2021" authors = ["GopherSecurity"] description = "Rust SDK for Gopher Orch - AI Agent orchestration framework" diff --git a/README.md b/README.md index 90b53127..ddc58359 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# gopher-orch - Rust SDK +# gopher-mcp-rust - Rust SDK Rust SDK for Gopher Orch - AI Agent orchestration framework with native C++ performance. @@ -48,6 +48,7 @@ Rust SDK for Gopher Orch - AI Agent orchestration framework with native C++ perf - **Tool Orchestration** - Manage and execute tools across multiple MCP servers - **State Management** - Built-in state graph for complex workflows - **Memory Safety** - Rust's ownership system with zero-cost abstractions +- **OAuth 2.0 Authentication** - JWT validation with JWKS support (feature-gated) ## When to Use This SDK @@ -68,7 +69,7 @@ This SDK is ideal for: │ ▼ ┌─────────────────────────────────────────────────────────────┐ -│ Rust SDK (gopher_orch) │ +│ Rust SDK (gopher_mcp_rust) │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │ │ │ GopherAgent │ │ConfigBuilder│ │ Error Types │ │ │ └─────────────┘ └─────────────┘ └─────────────────────┘ │ @@ -95,28 +96,40 @@ This SDK is ideal for: ## Installation -### Option 1: Cargo (when published) +### Option 1: From crates.io ```toml [dependencies] -gopher-orch = "0.1.0" +gopher-mcp-rust = "0.1.2" ``` ### Option 2: Git Dependency ```toml [dependencies] -gopher-orch = { git = "https://github.com/GopherSecurity/gopher-mcp-rust.git" } +gopher-mcp-rust = { git = "https://github.com/GopherSecurity/gopher-mcp-rust.git" } ``` ### Option 3: Build from Source See [Building from Source](#building-from-source) section below. +### With Auth Feature + +Enable OAuth 2.0 / JWT authentication support: + +```toml +[dependencies] +gopher-mcp-rust = { version = "0.1.2", features = ["auth"] } + +# Or with git +gopher-mcp-rust = { git = "https://github.com/GopherSecurity/gopher-mcp-rust.git", features = ["auth"] } +``` + ## Quick Start ```rust -use gopher_orch::{GopherAgent, ConfigBuilder}; +use gopher_mcp_rust::{GopherAgent, ConfigBuilder}; fn main() -> Result<(), Box> { // Create an agent with API key (fetches server config from remote API) @@ -268,10 +281,10 @@ The SDK searches for the native library in this order: The main struct for creating and running AI agents: ```rust -use gopher_orch::{GopherAgent, ConfigBuilder, AgentResult}; +use gopher_mcp_rust::{GopherAgent, ConfigBuilder, AgentResult}; // Initialize the library (called automatically on first create) -gopher_orch::init()?; +gopher_mcp_rust::init()?; // Create with API key (fetches server config from remote API) let config = ConfigBuilder::new() @@ -317,7 +330,7 @@ let detailed: AgentResult = agent.run_detailed("Your prompt here"); drop(agent); // Shutdown library -gopher_orch::shutdown(); +gopher_mcp_rust::shutdown(); ``` ### ConfigBuilder @@ -325,7 +338,7 @@ gopher_orch::shutdown(); Builder for creating agent configurations: ```rust -use gopher_orch::ConfigBuilder; +use gopher_mcp_rust::ConfigBuilder; // With API key let config = ConfigBuilder::new() @@ -351,7 +364,7 @@ assert!(!config.has_server_config()); The SDK provides typed errors for different failure scenarios: ```rust -use gopher_orch::{GopherAgent, ConfigBuilder, Error}; +use gopher_mcp_rust::{GopherAgent, ConfigBuilder, Error}; fn main() { let config = ConfigBuilder::new() @@ -383,7 +396,7 @@ fn main() { ### Basic Usage with API Key ```rust -use gopher_orch::{GopherAgent, ConfigBuilder}; +use gopher_mcp_rust::{GopherAgent, ConfigBuilder}; use std::env; fn main() -> Result<(), Box> { @@ -407,7 +420,7 @@ fn main() -> Result<(), Box> { ### Using Local MCP Servers ```rust -use gopher_orch::{GopherAgent, ConfigBuilder}; +use gopher_mcp_rust::{GopherAgent, ConfigBuilder}; const SERVER_CONFIG: &str = r#"{ "succeeded": true, @@ -465,6 +478,59 @@ cd examples/server3002 && npm install && npm run dev ANTHROPIC_API_KEY=your-key cargo run --example client_example_json ``` +### Auth MCP Server Example + +The `examples/auth` directory contains a complete OAuth 2.0 protected MCP server example using Axum: + +```bash +cd examples/auth + +# Run with auth disabled (development mode) +./run_example.sh --no-auth + +# Run with full OAuth support +./run_example.sh +``` + +**Features:** +- OAuth 2.0 / OIDC discovery endpoints (RFC 8414, RFC 9728) +- JWT token validation via native library +- Scope-based authorization for MCP tools +- Example weather tools with different scope requirements + +**Available Tools:** + +| Tool | Scope Required | Description | +|------|----------------|-------------| +| `get-weather` | None | Get current weather for a city | +| `get-forecast` | `mcp:read` | Get 5-day weather forecast | +| `get-weather-alerts` | `mcp:admin` | Get weather alerts for a region | + +**Using the Auth Client:** + +```rust +use gopher_mcp_rust::GopherAuthClient; + +// Create auth client with JWKS endpoint +let client = GopherAuthClient::new( + "https://auth.example.com/.well-known/jwks.json", + "https://auth.example.com" +)?; + +// Validate a JWT token +let result = client.validate_token("eyJ...", 60); +if result.valid { + println!("Token is valid!"); + println!("Subject: {}", result.payload.sub); + println!("Scopes: {:?}", result.payload.scope); +} + +// Extract payload without validation +let payload = client.extract_payload("eyJ...")?; +``` + +See [examples/auth/README.md](examples/auth/README.md) for full documentation. + --- ## Development @@ -633,7 +699,7 @@ Contributions are welcome! Please read our contributing guidelines. ## License -MIT License - see [LICENSE](LICENSE) file for details. +Apache License 2.0 - see [LICENSE](LICENSE) file for details. ## Links diff --git a/dump-version.sh b/dump-version.sh index 15eb7f07..c4612166 100755 --- a/dump-version.sh +++ b/dump-version.sh @@ -6,7 +6,6 @@ # ./dump-version.sh [OPTIONS] [VERSION] # # Options: -# --skip-crates Skip publishing to crates.io (default: publish) # --dry-run Show what would be done without making changes # --help Show this help message # @@ -22,14 +21,12 @@ # 4. Update CHANGELOG.md ([Unreleased] -> [X.Y.Z] - date) # 5. Create git tag vX.Y.Z # 6. Commit the changes -# 7. Publish to crates.io (unless --skip-crates is specified) +# 7. Push the tag to remote # # After running this script: # 1. Review the changes: git show HEAD -# 2. Push to release: git push origin br_release vX.Y.Z -# -# Environment variables: -# CARGO_REGISTRY_TOKEN - crates.io API token (required for publishing) +# 2. Push to release: git push origin br_release +# 3. CI workflow will create GitHub Release and publish to crates.io # set -e @@ -50,17 +47,12 @@ CHANGELOG_FILE="CHANGELOG.md" CARGO_TOML="Cargo.toml" # Options -PUBLISH_CRATES=true DRY_RUN=false INPUT_VERSION="" # Parse options while [[ $# -gt 0 ]]; do case $1 in - --skip-crates|--no-crates) - PUBLISH_CRATES=false - shift - ;; --dry-run) DRY_RUN=true shift @@ -69,7 +61,6 @@ while [[ $# -gt 0 ]]; do echo "Usage: $0 [OPTIONS] [VERSION]" echo "" echo "Options:" - echo " --skip-crates Skip publishing to crates.io (default: publish)" echo " --dry-run Show what would be done without making changes" echo " --help Show this help message" echo "" @@ -78,13 +69,16 @@ while [[ $# -gt 0 ]]; do echo " Format: X.Y.Z or X.Y.Z.E" echo "" echo "Examples:" - echo " $0 # Release to GitHub and crates.io" - echo " $0 0.1.2 # Release specific version" - echo " $0 --skip-crates # Release to GitHub only" + echo " $0 # Prepare release with gopher-orch version" + echo " $0 0.1.2 # Prepare release for specific version" echo " $0 --dry-run # Preview changes without executing" echo "" - echo "Environment variables:" - echo " CARGO_REGISTRY_TOKEN crates.io API token (required for publishing)" + echo "After running this script, push to trigger CI:" + echo " git push origin br_release" + echo "" + echo "CI workflow will:" + echo " - Create GitHub Release with native binaries" + echo " - Publish to crates.io" echo "" exit 0 ;; @@ -110,13 +104,6 @@ if [ "$DRY_RUN" = true ]; then echo "" fi -if [ "$PUBLISH_CRATES" = true ]; then - echo -e "${CYAN}Publishing to: GitHub + crates.io${NC}" -else - echo -e "${YELLOW}Publishing to: GitHub only (--skip-crates)${NC}" -fi -echo "" - # ----------------------------------------------------------------------------- # Step 1: Fetch latest gopher-orch version from GitHub releases # ----------------------------------------------------------------------------- @@ -165,6 +152,7 @@ echo -e "${YELLOW}Step 2: Determining target version...${NC}" if [ -z "$INPUT_VERSION" ]; then # No argument provided, use gopher-orch version directly TARGET_VERSION="$GOPHER_ORCH_VERSION" + CARGO_VERSION="$TARGET_VERSION" echo -e " No version argument provided" echo -e " Using gopher-orch version: ${GREEN}$TARGET_VERSION${NC}" else @@ -177,15 +165,20 @@ else exit 1 fi TARGET_VERSION="$INPUT_VERSION" + CARGO_VERSION="$TARGET_VERSION" elif echo "$INPUT_VERSION" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$'; then # X.Y.Z.E format - first 3 parts must match gopher-orch INPUT_BASE=$(echo "$INPUT_VERSION" | sed -E 's/^([0-9]+\.[0-9]+\.[0-9]+)\.[0-9]+$/\1/') + INPUT_EXT=$(echo "$INPUT_VERSION" | sed -E 's/^[0-9]+\.[0-9]+\.[0-9]+\.([0-9]+)$/\1/') if [ "$INPUT_BASE" != "$GOPHER_ORCH_VERSION" ]; then echo -e "${RED}Error: Version base $INPUT_BASE does not match gopher-orch version $GOPHER_ORCH_VERSION${NC}" echo "Extended version X.Y.Z.E must have X.Y.Z matching gopher-orch." exit 1 fi TARGET_VERSION="$INPUT_VERSION" + # Convert X.Y.Z.E to X.Y.Z-E for Cargo.toml (semver pre-release format) + CARGO_VERSION="${INPUT_BASE}-${INPUT_EXT}" + echo -e " ${CYAN}Note: Cargo version will be ${CARGO_VERSION} (semver format)${NC}" else echo -e "${RED}Error: Invalid version format '$INPUT_VERSION'${NC}" echo "Expected format: X.Y.Z or X.Y.Z.E" @@ -223,17 +216,17 @@ if [ ! -f "$CARGO_TOML" ]; then exit 1 fi -# Get current version -CURRENT_VERSION=$(grep -E '^version = "[0-9]+\.[0-9]+\.[0-9]+"' "$CARGO_TOML" | head -1 | sed -E 's/version = "([^"]+)"/\1/') +# Get current version (matches X.Y.Z or X.Y.Z-N format) +CURRENT_VERSION=$(grep -E '^version = "' "$CARGO_TOML" | head -1 | sed -E 's/version = "([^"]+)"/\1/') echo -e " Current version: ${YELLOW}$CURRENT_VERSION${NC}" if [ "$DRY_RUN" = false ]; then - # Update version in Cargo.toml - sed -i.bak -E "s/^version = \"[0-9]+\.[0-9]+\.[0-9]+.*\"/version = \"$TARGET_VERSION\"/" "$CARGO_TOML" + # Update version in Cargo.toml (use CARGO_VERSION for semver compatibility) + sed -i.bak -E "s/^version = \"[^\"]+\"/version = \"$CARGO_VERSION\"/" "$CARGO_TOML" rm -f "${CARGO_TOML}.bak" fi -echo -e " Updated to: ${GREEN}$TARGET_VERSION${NC}" +echo -e " Updated to: ${GREEN}$CARGO_VERSION${NC}" # ----------------------------------------------------------------------------- # Step 5: Check [Unreleased] section has content @@ -413,71 +406,41 @@ gopher-orch version: $GOPHER_ORCH_VERSION Changes: $(echo "$UNRELEASED_CONTENT" | head -15) " + + # Push the tag to remote + echo "" + echo -e "${CYAN}Pushing tag $TAG_VERSION to remote...${NC}" + git push origin "$TAG_VERSION" + echo -e " ${GREEN}Tag pushed successfully${NC}" else echo -e " ${YELLOW}[DRY RUN] Would commit Cargo.toml and CHANGELOG.md${NC}" echo -e " ${YELLOW}[DRY RUN] Would create tag $TAG_VERSION${NC}" fi -# ----------------------------------------------------------------------------- -# Step 8: Publish to crates.io -# ----------------------------------------------------------------------------- -echo "" -if [ "$PUBLISH_CRATES" = true ]; then - echo -e "${YELLOW}Step 8: Publishing to crates.io...${NC}" - - if [ "$DRY_RUN" = true ]; then - echo -e " ${YELLOW}[DRY RUN] Would run: cargo publish${NC}" - echo -e " ${CYAN}Verifying package...${NC}" - cargo publish --dry-run 2>&1 | head -20 || true - else - echo -e " ${CYAN}Running cargo publish...${NC}" - - # Publish - if cargo publish; then - echo -e " ${GREEN}Successfully published to crates.io${NC}" - else - echo -e "${RED}Error: Failed to publish to crates.io${NC}" - echo "The git commit and tag were created. You can manually publish later with:" - echo " cargo publish" - exit 1 - fi - fi -else - echo -e "${YELLOW}Step 8: Skipping crates.io publish (--skip-crates)${NC}" -fi - -echo "" echo -e "${GREEN}========================================${NC}" echo -e "${GREEN} Release preparation complete!${NC}" echo -e "${GREEN}========================================${NC}" echo "" echo -e "Version: ${CYAN}$TARGET_VERSION${NC}" +if [ "$CARGO_VERSION" != "$TARGET_VERSION" ]; then + echo -e "Cargo version: ${CYAN}$CARGO_VERSION${NC} (semver)" +fi echo -e "Tag: ${CYAN}$TAG_VERSION${NC}" echo -e "gopher-orch: ${CYAN}$GOPHER_ORCH_VERSION${NC}" -if [ "$PUBLISH_CRATES" = true ]; then - echo -e "crates.io: ${GREEN}Published${NC}" -else - echo -e "crates.io: ${YELLOW}Skipped${NC}" -fi echo "" echo -e "${YELLOW}Next steps:${NC}" echo " 1. Review the commit: git show HEAD" -echo " 2. Push to release: git push origin br_release $TAG_VERSION" +echo " 2. Push to release: git push origin br_release" echo "" -echo -e "${CYAN}After pushing:${NC}" -echo " - CI workflow will create GitHub Release" -echo " - Native libraries will be attached to release" -if [ "$PUBLISH_CRATES" = false ]; then - echo " - Publish to crates.io manually: cargo publish" -fi +echo -e "${CYAN}After pushing, CI will:${NC}" +echo " - Create GitHub Release with native binaries" +echo " - Publish to crates.io" echo "" echo -e "${CYAN}Users can install with:${NC}" -if [ "$PUBLISH_CRATES" = true ]; then - echo "" - echo " # From crates.io" - echo " [dependencies]" - echo " gopher-orch = \"$TARGET_VERSION\"" -fi +echo "" +echo " # From crates.io" +echo " [dependencies]" +echo " gopher-orch = \"$CARGO_VERSION\"" echo "" echo " # From GitHub" echo " [dependencies]" diff --git a/examples/client_example_json.rs b/examples/client_example_json.rs index 4fe114c8..b071ead4 100644 --- a/examples/client_example_json.rs +++ b/examples/client_example_json.rs @@ -1,6 +1,6 @@ //! Example using JSON server configuration. -use gopher_orch::{ConfigBuilder, GopherAgent}; +use gopher_mcp_rust::{ConfigBuilder, GopherAgent}; use std::env; /// Server configuration for local MCP servers diff --git a/src/ffi/auth.rs b/src/ffi/auth.rs index ca165670..4749be7e 100644 --- a/src/ffi/auth.rs +++ b/src/ffi/auth.rs @@ -5,7 +5,7 @@ //! # Example //! //! ```ignore -//! use gopher_orch::ffi::auth::GopherAuthClient; +//! use gopher_mcp_rust::ffi::auth::GopherAuthClient; //! //! let client = GopherAuthClient::new( //! "https://auth.example.com/.well-known/jwks.json", diff --git a/src/lib.rs b/src/lib.rs index 35bedc4b..c30aeedf 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,11 +1,11 @@ -//! # Gopher Orch Rust SDK +//! # Gopher MCP Rust SDK //! //! Rust SDK for Gopher Orch - AI Agent orchestration framework with native C++ performance. //! //! ## Quick Start //! //! ```rust,no_run -//! use gopher_orch::{GopherAgent, ConfigBuilder}; +//! use gopher_mcp_rust::{GopherAgent, ConfigBuilder}; //! //! fn main() -> Result<(), Box> { //! // Create agent with server configuration diff --git a/tests/ffi_tests.rs b/tests/ffi_tests.rs index 9e80f3dc..7e623acc 100644 --- a/tests/ffi_tests.rs +++ b/tests/ffi_tests.rs @@ -2,7 +2,7 @@ //! //! These tests verify that the FFI bindings work correctly with the native library. -use gopher_orch::{init, is_initialized, ConfigBuilder, GopherAgent}; +use gopher_mcp_rust::{init, is_initialized, ConfigBuilder, GopherAgent}; use std::path::Path; const TEST_SERVER_CONFIG: &str = r#"{