From 56511033fc7d7aa3eeeee57ccb5895d9bd11a762 Mon Sep 17 00:00:00 2001 From: elasticdotventures Date: Wed, 12 Nov 2025 11:43:06 +0000 Subject: [PATCH 1/4] wip: testing pkgx & docker builds --- .dockerignore | 9 ++++++ .github/workflows/docker.yml | 56 ++++++++++++++++++++++++++++++++++++ CHANGELOG.md | 9 ++++++ Cargo.lock | 4 +-- Cargo.toml | 6 ++-- Dockerfile | 37 ++++++++++++++++++++++++ README.md | 53 +++++++++++++++++++++++++++++++--- cog.toml | 22 ++++++++++++++ docker/entrypoint.sh | 16 +++++++++++ justfile | 9 ++++-- scripts/set-version.sh | 52 +++++++++++++++++++++++++++++++++ src/tools/docs/docs.rs | 8 +++--- 12 files changed, 266 insertions(+), 15 deletions(-) create mode 100644 .dockerignore create mode 100644 .github/workflows/docker.yml create mode 100644 CHANGELOG.md create mode 100644 Dockerfile create mode 100644 cog.toml create mode 100755 docker/entrypoint.sh create mode 100755 scripts/set-version.sh diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..6d07fca --- /dev/null +++ b/.dockerignore @@ -0,0 +1,9 @@ +target +**/target +.git +.gitignore +*.log +node_modules +dist +tmp +.DS_Store diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 0000000..8a1b0a0 --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,56 @@ +name: Docker Image + +on: + push: + branches: + - main + tags: + - "v*" + workflow_dispatch: + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + build-and-push: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Docker metadata + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=ref,event=branch + type=ref,event=tag + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + + - name: Build and push + uses: docker/build-push-action@v6 + with: + context: . + push: true + platforms: linux/amd64 + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..1b15104 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,9 @@ +# Changelog + +## [0.3.0] - 2025-11-12 +- rename the crate and repository references to `rust-cargo-docs-rag-mcp` +- document the new GitHub location plus attribution expectations for upstream +- add Cocogitto (`cog`) configuration, release script, and changelog scaffolding for version control +- add an Alpine-based Docker image build + entrypoint script plus usage docs for container publishing +- publish the container automatically to GHCR using `.github/workflows/docker.yml` +- update Docker builder stage to the latest stable Rust toolchain (1.91.1) for smaller, faster binaries diff --git a/Cargo.lock b/Cargo.lock index 6d79a86..7d01dcc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -437,8 +437,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] -name = "cratedocs-mcp" -version = "0.2.0" +name = "rust-cargo-docs-rag-mcp" +version = "0.3.0" dependencies = [ "anyhow", "axum", diff --git a/Cargo.toml b/Cargo.toml index 4c4f286..896c93f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ [package] -name = "cratedocs-mcp" -version = "0.2.0" +name = "rust-cargo-docs-rag-mcp" +version = "0.3.0" edition = "2021" description = "Rust Documentation MCP Server for LLM crate assistance" authors = ["Brian Horakh ", "Claude "] license = "MIT" -repository = "https://github.com/d6e/cratedocs-mcp" +repository = "https://github.com/promptexecution/rust-cargo-docs-rag-mcp" [workspace] members = [ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..45a7b23 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,37 @@ +FROM rust:1.91.1-alpine3.20 AS builder + +RUN apk add --no-cache \ + build-base \ + pkgconfig \ + openssl-dev \ + git + +WORKDIR /app + +# Cache dependency compilation +COPY Cargo.toml Cargo.lock ./ +RUN mkdir src && echo "fn main() {}" > src/main.rs +RUN cargo fetch +RUN rm -rf src + +# Copy the full source tree +COPY . . + +RUN cargo build --locked --release --bin cratedocs + +FROM alpine:3.20 + +RUN apk add --no-cache ca-certificates libgcc libstdc++ libssl3 + +COPY --from=builder /app/target/release/cratedocs /usr/local/bin/cratedocs +COPY docker/entrypoint.sh /entrypoint.sh + +RUN chmod +x /entrypoint.sh + +EXPOSE 8080 + +ENV CRATEDOCS_MODE=http \ + CRATEDOCS_ADDRESS=0.0.0.0:8080 \ + CRATEDOCS_DEBUG=false + +ENTRYPOINT ["/entrypoint.sh"] diff --git a/README.md b/README.md index 8ad5129..1a996a6 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# CrateDocs MCP +# Rust Cargo Docs RAG MCP -This is an MCP (Model Context Protocol) server that provides tools for Rust crate documentation lookup. It allows LLMs to look up documentation for Rust crates they are unfamiliar with. +`rust-cargo-docs-rag-mcp` is an MCP (Model Context Protocol) server that provides tools for Rust crate documentation lookup. It allows LLMs to look up documentation for Rust crates they are unfamiliar with. ## Features @@ -11,8 +11,8 @@ This is an MCP (Model Context Protocol) server that provides tools for Rust crat ## Installation ```bash -git clone https://github.com/promptexecution/cratedocs-mcp.git -cd cratedocs-mcp +git clone https://github.com/promptexecution/rust-cargo-docs-rag-mcp.git +cd rust-cargo-docs-rag-mcp cargo build --release cargo install --path . ``` @@ -39,6 +39,31 @@ cargo run --bin cratedocs http --address 0.0.0.0:3000 cargo run --bin cratedocs http --debug ``` +### Using Docker + +You can also build and run the server in an Alpine-based container. Prebuilt images are automatically published to GHCR via [`.github/workflows/docker.yml`](.github/workflows/docker.yml): + +```bash +docker pull ghcr.io/promptexecution/rust-cargo-docs-rag-mcp:latest +``` + +To build locally (useful before pushing to another registry): + +```bash +# Build the image (adjust the tag to match your registry) +docker build -t promptexecution/rust-cargo-docs-rag-mcp . + +# Run HTTP/SSE mode on port 8080 +docker run --rm -p 8080:8080 promptexecution/rust-cargo-docs-rag-mcp +``` + +Configuration is controlled through environment variables: +- `CRATEDOCS_MODE` (default `http`): switch to `stdio` to expose the stdio MCP server +- `CRATEDOCS_ADDRESS` (default `0.0.0.0:8080`): bind the HTTP server to a specific interface/port +- `CRATEDOCS_DEBUG` (default `false`): set to `true` to enable verbose logging in HTTP mode + +All additional arguments appended to `docker run ... -- ` are forwarded to the underlying `cratedocs` process. + ### Directly Testing Documentation Tools You can directly test the documentation tools from the command line without starting a server: @@ -229,6 +254,26 @@ Stub: list_crate_items for crate: serde, version: 1.0.0, filters: Some(ItemListF When implemented, the output will be a structured list of items matching the filters. +## Versioning & Releases + +This repository includes a [`cog.toml`](./cog.toml) profile wired to [`scripts/set-version.sh`](./scripts/set-version.sh) so [Cocogitto](https://github.com/cocogitto/cocogitto) can bump the crate version and regenerate the changelog automatically. + +Typical release flow: +1. `cargo install cocogitto` (once) +2. `cog bump minor` (or `patch`/`major`) – this updates `Cargo.toml`, `Cargo.lock`, and `CHANGELOG.md` +3. Review the generated changelog, run tests, and push the resulting tag/commit + +See [`CHANGELOG.md`](./CHANGELOG.md) for the latest published versions. + ## License MIT License + +## Attribution & Linkback Request + +This fork builds on the original [`d6e/cratedocs-mcp`](https://github.com/d6e/cratedocs-mcp) work by: +- wiring the crate-documentation helpers into a full MCP server with both `stdio` and HTTP/SSE launch modes +- documenting the new unified CLI, RooCode/Vscode integration examples, and the `list_crate_items` tool surface +- adding guidance on testing individual tools directly from the CLI plus notes on caching and output formatting + +If you decide to keep these changes upstream, could you please add a short linkback to [`promptexecution/rust-cargo-docs-rag-mcp`](https://github.com/promptexecution/rust-cargo-docs-rag-mcp) in your README? That attribution helps other developers understand where this MCP-focused variant originated and makes it easier for them to follow improvements across both projects. diff --git a/cog.toml b/cog.toml new file mode 100644 index 0000000..e982b59 --- /dev/null +++ b/cog.toml @@ -0,0 +1,22 @@ +from_latest_tag = true +ignore_merge_commits = true +branch_whitelist = ["main"] + +[git] +tag_prefix = "v" + +[changelog] +path = "CHANGELOG.md" +template = "remote" + +pre_bump_hooks = [ + "./scripts/set-version.sh {{version}}" +] + +post_bump_hooks = [ + "git add Cargo.toml Cargo.lock CHANGELOG.md" +] + +[[packages]] +name = "rust-cargo-docs-rag-mcp" +path = "." diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh new file mode 100755 index 0000000..b1283c8 --- /dev/null +++ b/docker/entrypoint.sh @@ -0,0 +1,16 @@ +#!/bin/sh +set -eu + +MODE="${CRATEDOCS_MODE:-http}" +ADDRESS="${CRATEDOCS_ADDRESS:-0.0.0.0:8080}" +DEBUG="${CRATEDOCS_DEBUG:-false}" + +if [ "$MODE" = "http" ]; then + if [ "$DEBUG" = "true" ]; then + exec /usr/local/bin/cratedocs http --address "$ADDRESS" --debug "$@" + else + exec /usr/local/bin/cratedocs http --address "$ADDRESS" "$@" + fi +else + exec /usr/local/bin/cratedocs "$MODE" "$@" +fi diff --git a/justfile b/justfile index caa54c8..b680048 100644 --- a/justfile +++ b/justfile @@ -1,10 +1,15 @@ install: - cargo install --git https://github.com/PromptExecution/cratedocs-mcp --locked + cargo install --git https://github.com/promptexecution/rust-cargo-docs-rag-mcp --locked run: cargo run --bin cratedocs http --address 0.0.0.0:3000 --debug +docker-build: + docker build -t promptexecution/rust-cargo-docs-rag-mcp . + +docker-run: + docker run --rm -p 8080:8080 promptexecution/rust-cargo-docs-rag-mcp + debug-mcp-remote: # use bunx or npx to see how the mcp-remote proxy connects bunx mcp-remote@latest "http://127.0.0.1:3000/sse" --allow-http --transport sse-only --debug - diff --git a/scripts/set-version.sh b/scripts/set-version.sh new file mode 100755 index 0000000..15de3fc --- /dev/null +++ b/scripts/set-version.sh @@ -0,0 +1,52 @@ +#!/usr/bin/env bash +set -euo pipefail + +if [ "$#" -ne 1 ]; then + echo "usage: $0 " >&2 + exit 1 +fi + +version="$1" + +# Update Cargo.toml package version (first occurrence only to avoid dependency matches) +python3 - "$version" <<'PY' +import pathlib, re, sys +version = sys.argv[1] +path = pathlib.Path("Cargo.toml") +text = path.read_text() +new_text, count = re.subn(r'(?m)^(version\s*=\s*)"[^"]+"', rf'\1"{version}"', text, count=1) +if count != 1: + raise SystemExit("Could not update version in Cargo.toml") +path.write_text(new_text) +PY + +# Update Cargo.lock entry for this crate +python3 - "$version" <<'PY' +import pathlib, sys +version = sys.argv[1] +path = pathlib.Path("Cargo.lock") +lines = path.read_text().splitlines() +out_lines = [] +in_pkg = False +target = 'name = "rust-cargo-docs-rag-mcp"' +updated = False +for line in lines: + stripped = line.strip() + if stripped == target: + in_pkg = True + out_lines.append(line) + continue + if in_pkg and stripped.startswith("version = "): + out_lines.append(f'version = "{version}"') + in_pkg = False + updated = True + continue + if stripped.startswith("name = ") and stripped != target: + in_pkg = False + out_lines.append(line) + +if not updated: + raise SystemExit("Could not update version in Cargo.lock") + +path.write_text("\n".join(out_lines) + "\n") +PY diff --git a/src/tools/docs/docs.rs b/src/tools/docs/docs.rs index c43c2dd..01eb0e7 100644 --- a/src/tools/docs/docs.rs +++ b/src/tools/docs/docs.rs @@ -96,7 +96,7 @@ impl DocRouter { // Fetch the documentation page let response = self.client.get(&url) - .header("User-Agent", "CrateDocs/0.1.0 (https://github.com/d6e/cratedocs-mcp)") + .header("User-Agent", "CrateDocs/0.1.0 (https://github.com/promptexecution/rust-cargo-docs-rag-mcp)") .send() .await .map_err(|e| { @@ -130,7 +130,7 @@ impl DocRouter { let url = format!("https://crates.io/api/v1/crates?q={}&per_page={}", query, limit); let response = self.client.get(&url) - .header("User-Agent", "CrateDocs/0.1.0 (https://github.com/d6e/cratedocs-mcp)") + .header("User-Agent", "CrateDocs/0.1.0 (https://github.com/promptexecution/rust-cargo-docs-rag-mcp)") .send() .await .map_err(|e| { @@ -217,7 +217,7 @@ impl DocRouter { // Try to fetch the documentation page let response = match self.client.get(&url) - .header("User-Agent", "CrateDocs/0.1.0 (https://github.com/d6e/cratedocs-mcp)") + .header("User-Agent", "CrateDocs/0.1.0 (https://github.com/promptexecution/rust-cargo-docs-rag-mcp)") .send().await { Ok(resp) => resp, Err(e) => { @@ -533,4 +533,4 @@ impl mcp_server::Router for DocRouter { ))) }) } -} \ No newline at end of file +} From 471be1864c0a59d2314e7283d854b729b7081785 Mon Sep 17 00:00:00 2001 From: elasticdotventures Date: Sat, 15 Nov 2025 23:03:52 +0000 Subject: [PATCH 2/4] feat: pkgx mcp registry --- .github/workflows/docker.yml | 40 ++++++++++++++++++++++ CHANGELOG.md | 2 ++ Cargo.lock | 64 ++++++++++++++++++------------------ Dockerfile | 2 ++ README.md | 16 +++++++++ justfile | 7 ++++ 6 files changed, 99 insertions(+), 32 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 8a1b0a0..ebece39 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -54,3 +54,43 @@ jobs: platforms: linux/amd64 tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} + + publish-mcp: + needs: build-and-push + if: startsWith(github.ref, 'refs/tags/v') + runs-on: ubuntu-latest + permissions: + contents: read + id-token: write + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install MCP Publisher + run: | + curl -L "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz" \ + | tar xz mcp-publisher + chmod +x mcp-publisher + + - name: Prepare server manifest + run: | + VERSION=${GITHUB_REF#refs/tags/v} + IMAGE_REPO=$(echo "${GITHUB_REPOSITORY}" | tr '[:upper:]' '[:lower:]') + IMAGE="ghcr.io/${IMAGE_REPO}:$VERSION" + jq --arg v "$VERSION" --arg image "$IMAGE" ' + .version = $v + | .packages = (.packages // [] | map( + if .registryType == "oci" then + (.identifier = $image) + else . + end + | (if has("version") then .version = $v else . end) + )) + ' server.json > server.publish.json + mv server.publish.json server.json + + - name: Login to MCP Registry + run: ./mcp-publisher login github-oidc + + - name: Publish to MCP Registry + run: ./mcp-publisher publish diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b15104..eceda79 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,3 +7,5 @@ - add an Alpine-based Docker image build + entrypoint script plus usage docs for container publishing - publish the container automatically to GHCR using `.github/workflows/docker.yml` - update Docker builder stage to the latest stable Rust toolchain (1.91.1) for smaller, faster binaries +- add a self-contained pkgx pantry (`pkgx/`) with build/test metadata so `pkgx cratedocs` can install the server via the pkgx runtime, plus README instructions for using and upstreaming it +- add `just install-pkgx` to verify the pkgx pantry wiring end-to-end (falls back to a helpful message until the package is mirrored onto dist.pkgx.dev) diff --git a/Cargo.lock b/Cargo.lock index 7d01dcc..efe89f7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -436,38 +436,6 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" -[[package]] -name = "rust-cargo-docs-rag-mcp" -version = "0.3.0" -dependencies = [ - "anyhow", - "axum", - "clap", - "flate2", - "futures", - "html2md", - "hyper 0.14.32", - "mcp-core", - "mcp-macros", - "mcp-server", - "mockito", - "rand 0.8.5", - "regex", - "reqwest", - "serde", - "serde_json", - "syn", - "tar", - "tokenizers", - "tokio", - "tokio-util", - "tower 0.4.13", - "tower-service", - "tracing", - "tracing-appender", - "tracing-subscriber", -] - [[package]] name = "crc32fast" version = "1.4.2" @@ -2125,6 +2093,38 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rust-cargo-docs-rag-mcp" +version = "0.3.0" +dependencies = [ + "anyhow", + "axum", + "clap", + "flate2", + "futures", + "html2md", + "hyper 0.14.32", + "mcp-core", + "mcp-macros", + "mcp-server", + "mockito", + "rand 0.8.5", + "regex", + "reqwest", + "serde", + "serde_json", + "syn", + "tar", + "tokenizers", + "tokio", + "tokio-util", + "tower 0.4.13", + "tower-service", + "tracing", + "tracing-appender", + "tracing-subscriber", +] + [[package]] name = "rustc-demangle" version = "0.1.24" diff --git a/Dockerfile b/Dockerfile index 45a7b23..9e7513b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -28,6 +28,8 @@ COPY docker/entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh +LABEL io.modelcontextprotocol.server.name="io.github.promptexecution/rust-cargo-docs-rag-mcp" + EXPOSE 8080 ENV CRATEDOCS_MODE=http \ diff --git a/README.md b/README.md index 1a996a6..3088ac3 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,24 @@ git clone https://github.com/promptexecution/rust-cargo-docs-rag-mcp.git cd rust-cargo-docs-rag-mcp cargo build --release cargo install --path . +# Or install the pkgx-managed binary and check its version +just install-pkgx ``` +### Installing with pkgx + +The repository includes a mini [pkgx pantry](./pkgx) so you can build and run the CLI through `pkgx` without touching your global toolchain: + +```bash +git clone https://github.com/promptexecution/rust-cargo-docs-rag-mcp.git +cd rust-cargo-docs-rag-mcp +export PKGX_PANTRY_PATH=$PWD/pkgx +export PKGX_PANTRY_DIR=$PWD/pkgx # pkgx^2 compatibility +pkgx cratedocs version +``` + +`pkgx` will download the tagged source tarball, compile `cratedocs` with the required Rust toolchain, and cache the result for subsequent runs. Once you're ready to upstream this package to the central [pkgx pantry](https://github.com/pkgxdev/pantry), copy `pkgx/projects/github.com/promptexecution/rust-cargo-docs-rag-mcp/package.yml` into a new PR there. + ## Running the Server There are multiple ways to run the documentation server: diff --git a/justfile b/justfile index b680048..bf300d5 100644 --- a/justfile +++ b/justfile @@ -4,6 +4,13 @@ install: run: cargo run --bin cratedocs http --address 0.0.0.0:3000 --debug +install-pkgx: + @echo "Using pkgx pantry at {{invocation_directory()}}/pkgx" + PKGX_PANTRY_PATH={{invocation_directory()}}/pkgx \ + PKGX_PANTRY_DIR={{invocation_directory()}}/pkgx \ + pkgx cratedocs version || \ + (echo "pkgx failed (likely no network); see README for manual steps" && exit 1) + docker-build: docker build -t promptexecution/rust-cargo-docs-rag-mcp . From d17ed01673a12fded41f8bc8f0395c913c2e2f59 Mon Sep 17 00:00:00 2001 From: elasticdotventures Date: Sat, 15 Nov 2025 23:08:20 +0000 Subject: [PATCH 3/4] feat: pkgx --- pkgx/pkgx.yaml | 6 ++++ .../rust-cargo-docs-rag-mcp/package.yml | 25 ++++++++++++++++ server.json | 29 +++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 pkgx/pkgx.yaml create mode 100644 pkgx/projects/github.com/promptexecution/rust-cargo-docs-rag-mcp/package.yml create mode 100644 server.json diff --git a/pkgx/pkgx.yaml b/pkgx/pkgx.yaml new file mode 100644 index 0000000..cdc623b --- /dev/null +++ b/pkgx/pkgx.yaml @@ -0,0 +1,6 @@ +dependencies: + pkgx.sh/brewkit: ^0 || ^1 + +env: + PKGX_PANTRY_PATH: ${{srcroot}} + PKGX_PANTRY_DIR: ${{srcroot}} diff --git a/pkgx/projects/github.com/promptexecution/rust-cargo-docs-rag-mcp/package.yml b/pkgx/projects/github.com/promptexecution/rust-cargo-docs-rag-mcp/package.yml new file mode 100644 index 0000000..d68e014 --- /dev/null +++ b/pkgx/projects/github.com/promptexecution/rust-cargo-docs-rag-mcp/package.yml @@ -0,0 +1,25 @@ +distributable: + url: https://github.com/promptexecution/rust-cargo-docs-rag-mcp/archive/refs/tags/{{ version.tag }}.tar.gz + strip-components: 1 + +versions: + github: promptexecution/rust-cargo-docs-rag-mcp + +dependencies: + openssl.org: '>=1.1' + +build: + dependencies: + rust-lang.org: '>=1.91' + rust-lang.org/cargo: '*' + script: + - cargo install --locked \ + --root={{ prefix }} \ + --path=. \ + --bin cratedocs + +provides: + - bin/cratedocs + +test: + - cratedocs version | grep {{version}} diff --git a/server.json b/server.json new file mode 100644 index 0000000..bbe1c9d --- /dev/null +++ b/server.json @@ -0,0 +1,29 @@ +{ + "$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json", + "name": "io.github.promptexecution/rust-cargo-docs-rag-mcp", + "title": "Rust Cargo Docs RAG", + "description": "Lookup Rust crate and item documentation via docs.rs and crates.io search.", + "websiteUrl": "https://github.com/promptexecution/rust-cargo-docs-rag-mcp", + "repository": { + "url": "https://github.com/promptexecution/rust-cargo-docs-rag-mcp", + "source": "github" + }, + "version": "0.3.0", + "packages": [ + { + "registryType": "oci", + "identifier": "ghcr.io/promptexecution/rust-cargo-docs-rag-mcp:0.3.0", + "runtimeHint": "docker", + "transport": { + "type": "stdio" + }, + "environmentVariables": [ + { + "name": "CRATEDOCS_MODE", + "value": "stdio", + "description": "Ensure the container exposes the MCP stdio transport when run by clients." + } + ] + } + ] +} From 5457e7ca7539c4b7da9f22d8f0eca60ffc7c0c27 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 15 Nov 2025 23:09:26 +0000 Subject: [PATCH 4/4] Initial plan