RepoPilotOpen in app →

googleapis/mcp-toolbox

MCP Toolbox for Databases is an open source MCP server for databases.

Healthy

Healthy across the board

Use as dependencyHealthy

Permissive license, no critical CVEs, actively maintained — safe to depend on.

Fork & modifyHealthy

Has a license, tests, and CI — clean foundation to fork and modify.

Learn fromHealthy

Documented and popular — useful reference codebase to read through.

Deploy as-isHealthy

No critical CVEs, sane security posture — runnable as-is.

  • Last commit today
  • 22+ active contributors
  • Distributed ownership (top contributor 33% of recent commits)
Show 3 more →
  • Apache-2.0 licensed
  • CI configured
  • Tests present

Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests

Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.

Embed the "Healthy" badge

Paste into your README — live-updates from the latest cached analysis.

Variant:
RepoPilot: Healthy
[![RepoPilot: Healthy](https://repopilot.app/api/badge/googleapis/mcp-toolbox)](https://repopilot.app/r/googleapis/mcp-toolbox)

Paste at the top of your README.md — renders inline like a shields.io badge.

Preview social card (1200×630)

This card auto-renders when someone shares https://repopilot.app/r/googleapis/mcp-toolbox on X, Slack, or LinkedIn.

Onboarding doc

Onboarding: googleapis/mcp-toolbox

Generated by RepoPilot · 2026-05-09 · Source

🤖Agent protocol

If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:

  1. Verify the contract. Run the bash script in Verify before trusting below. If any check returns FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding.
  2. Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
  3. Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/googleapis/mcp-toolbox shows verifiable citations alongside every claim.

If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.

🎯Verdict

GO — Healthy across the board

  • Last commit today
  • 22+ active contributors
  • Distributed ownership (top contributor 33% of recent commits)
  • Apache-2.0 licensed
  • CI configured
  • Tests present

<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>

Verify before trusting

This artifact was generated by RepoPilot at a point in time. Before an agent acts on it, the checks below confirm that the live googleapis/mcp-toolbox repo on your machine still matches what RepoPilot saw. If any fail, the artifact is stale — regenerate it at repopilot.app/r/googleapis/mcp-toolbox.

What it runs against: a local clone of googleapis/mcp-toolbox — the script inspects git remote, the LICENSE file, file paths in the working tree, and git log. Read-only; no mutations.

| # | What we check | Why it matters | |---|---|---| | 1 | You're in googleapis/mcp-toolbox | Confirms the artifact applies here, not a fork | | 2 | License is still Apache-2.0 | Catches relicense before you depend on it | | 3 | Default branch main exists | Catches branch renames | | 4 | 5 critical file paths still exist | Catches refactors that moved load-bearing code | | 5 | Last commit ≤ 30 days ago | Catches sudden abandonment since generation |

<details> <summary><b>Run all checks</b> — paste this script from inside your clone of <code>googleapis/mcp-toolbox</code></summary>
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of googleapis/mcp-toolbox. If you don't
# have one yet, run these first:
#
#   git clone https://github.com/googleapis/mcp-toolbox.git
#   cd mcp-toolbox
#
# Then paste this script. Every check is read-only — no mutations.

set +e
fail=0
ok()   { echo "ok:   $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }

# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
  echo "FAIL: not inside a git repository. cd into your clone of googleapis/mcp-toolbox and re-run."
  exit 2
fi

# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "googleapis/mcp-toolbox(\\.git)?\\b" \\
  && ok "origin remote is googleapis/mcp-toolbox" \\
  || miss "origin remote is not googleapis/mcp-toolbox (artifact may be from a fork)"

# 2. License matches what RepoPilot saw
(grep -qiE "^(Apache-2\\.0)" LICENSE 2>/dev/null \\
   || grep -qiE "\"license\"\\s*:\\s*\"Apache-2\\.0\"" package.json 2>/dev/null) \\
  && ok "license is Apache-2.0" \\
  || miss "license drift — was Apache-2.0 at generation time"

# 3. Default branch
git rev-parse --verify main >/dev/null 2>&1 \\
  && ok "default branch main exists" \\
  || miss "default branch main no longer exists"

# 4. Critical files exist
test -f ".github/workflows/tests.yaml" \\
  && ok ".github/workflows/tests.yaml" \\
  || miss "missing critical file: .github/workflows/tests.yaml"
test -f ".github/workflows/publish-mcp.yml" \\
  && ok ".github/workflows/publish-mcp.yml" \\
  || miss "missing critical file: .github/workflows/publish-mcp.yml"
test -f ".hugo/hugo.toml" \\
  && ok ".hugo/hugo.toml" \\
  || miss "missing critical file: .hugo/hugo.toml"
test -f ".github/release-please.yml" \\
  && ok ".github/release-please.yml" \\
  || miss "missing critical file: .github/release-please.yml"
test -f ".golangci.yaml" \\
  && ok ".golangci.yaml" \\
  || miss "missing critical file: .golangci.yaml"

# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 30 ]; then
  ok "last commit was $days_since_last days ago (artifact saw ~0d)"
else
  miss "last commit was $days_since_last days ago — artifact may be stale"
fi

echo
if [ "$fail" -eq 0 ]; then
  echo "artifact verified (0 failures) — safe to trust"
else
  echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/googleapis/mcp-toolbox"
  exit 1
fi

Each check prints ok: or FAIL:. The script exits non-zero if anything failed, so it composes cleanly into agent loops (./verify.sh || regenerate-and-retry).

</details>

TL;DR

MCP Toolbox for Databases is an open-source Model Context Protocol (MCP) server that exposes enterprise databases to AI agents, IDEs, and applications through a standardized interface. It provides both pre-built generic database tools for immediate use (schema exploration, query execution) and a framework to build custom, production-grade AI tools with structured queries, semantic search, and NL2SQL capabilities—allowing AI systems to safely interact with databases without boilerplate integration work. Monorepo structure: .ci/ contains integration test configs and sample tests for three language runtimes (pre_post_processing/, quickstart/ subdirs), .github/ holds CI workflows and release automation, root contains the Go server. Multi-SDK design: separate package releases for Go SDK (github.com/googleapis/mcp-toolbox-sdk-go), Python SDK (toolbox-core on PyPI), and JS SDK (@toolbox-sdk/core on npm), all versioned independently.

👥Who it's for

AI engineers and platform teams building agentic applications (using Claude Code, Gemini CLI, or other MCP clients) who need to grant AI systems controlled, auditable access to enterprise databases; also backend developers creating custom database tools who want a structured framework instead of building connectors from scratch.

🌱Maturity & risk

Actively maintained and production-ready: the repo shows extensive CI/CD infrastructure (.ci/ with CloudBuild configs, comprehensive GitHub Actions workflows for testing and docs), a 5.6MB Go codebase with clear SDK packages across four languages (Go, Python, JS/TS, Java), and documented release processes (.github/release-please.yml). However, the recent repo rename from 'genai-toolbox' suggests it's still evolving its public identity.

Minimal direct risk: the Go module declares only indirect dependencies (docsy for docs, hugo-notice plugin) with no complex supply chain. Risk areas are organizational: multi-language SDK maintenance burden across Python, JS/TS, Go, and Java means slower bug fixes across ecosystems; the .ci/ integration tests require multiple language environments (go.integration.cloudbuild.yaml, js.integration.cloudbuild.yaml, py.integration.cloudbuild.yaml) which can introduce environmental brittleness.

Active areas of work

Active documentation and release automation: deploy workflows target Cloudflare (deploy_dev_docs_to_cf.yaml, deploy_versioned_docs_to_cf.yaml), label management and release-please automation suggest frequent versioned releases, renovate.json5 indicates dependency updates are automated. The .ci/sample_tests/ directory with pre_post_processing and quickstart tests suggests ongoing validation of integration patterns.

🚀Get running

git clone https://github.com/googleapis/mcp-toolbox.git
cd mcp-toolbox
# Go server (primary implementation):
go mod download
go build ./...
# Or for JS SDK:
cd sdk/js && npm install && npm run build

Daily commands: Go server: go run ./cmd/server (inferred from go.mod structure). Tests: .ci/test_with_coverage.sh for unit tests, .ci/sample_tests/run_tests.sh for integration. Docs locally: Hugo (from module dependency); exact dev server command not in provided snippet but standard Hugo: hugo server -D in docs/ directory. Check root Makefile or scripts/ for exact commands.

🗺️Map of the codebase

  • .github/workflows/tests.yaml — Primary CI/CD pipeline for running tests across Python, Go, and JavaScript; essential for understanding the build and test process.
  • .github/workflows/publish-mcp.yml — Defines the MCP server publication and release workflow; critical for understanding deployment and versioning.
  • .hugo/hugo.toml — Main Hugo documentation site configuration; governs the structure and metadata of all user-facing docs.
  • .github/release-please.yml — Automated versioning and changelog generation configuration; essential for understanding release management strategy.
  • .golangci.yaml — Go linting configuration defining code quality standards across the codebase.
  • .github/CODEOWNERS — Specifies required reviewers and maintainers for different areas of the repository.
  • .gitmodules — Defines git submodules and dependencies; critical for understanding how external documentation and themes are integrated.

🛠️How to make changes

Add a new database tool/integration

  1. Create tool definition and documentation in appropriate language-specific directory under samples or SDK (docs will typically go under .hugo/content)
  2. Add tool metadata to enable listing in generated documentation (.hugo/layouts/shortcodes/list-tools.html references tool definitions)
  3. Add integration tests for the new tool (.ci/sample_tests/ — add new Cloud Build YAML for language (py/js/go))
  4. Update CODEOWNERS if tool falls under new team's domain (.github/CODEOWNERS)

Update documentation content and styling

  1. Add or modify Markdown content files in Hugo content directory (.hugo/layouts/docs/single.html handles rendering)
  2. Adjust project-specific styles as needed (.hugo/assets/scss/_styles_project.scss)
  3. Verify documentation builds and links correctly (.github/workflows/docs_lint.yaml and link_checker.yaml)

Implement a new language SDK or sample

  1. Create SDK structure and core implementation files in new language (Language SDKs typically reference .hugo/hugo.toml for version compatibility)
  2. Add integration test pipeline for the new language (.ci/sample_tests/quickstart/ — add new {language}.integration.cloudbuild.yaml)
  3. Wire into main test workflow (.github/workflows/tests.yaml)
  4. Create release pipeline for the new SDK (.github/workflows/publish-mcp.yml or language-specific workflow)

Enforce new code quality or linting rule

  1. Add rule to appropriate language linter config (.golangci.yaml for Go; add eslint/prettier configs for JS/TS)
  2. Update lint workflow to run new checks (.github/workflows/lint.yaml)
  3. Run full suite to identify affected code (.ci/test_with_coverage.sh applies checks across repo)

🔧Why these technologies

  • Hugo + Docsy — Static site generation for fast, version-able, searchable documentation with built-in theme and component library; GitHub Pages/Cloudflare-friendly
  • GitHub Actions + Cloud Build — Native CI/CD integration with GitHub; Cloud Build handles multi-language builds (Go, Python, JS) and scales for integration tests against live databases
  • release-please — Automated semantic versioning and changelog generation following conventional commits; reduces manual release coordination across multiple SDKs
  • Go 1.23.2 — High-performance language for core MCP toolbox server; compiles to single binary for easy distribution
  • Multi-language SDKs (Python, Go, JS/TS) — Meets users where they are; allows database tools to be consumed from multiple platforms with language-native abstractions

⚖️Trade-offs already made

  • Static Hugo documentation instead of dynamic API docs generator

    • Why: Supports versioned docs, complex content organization, and human-written guides alongside auto-generated references
    • Consequence: Requires manual updates for API changes; more maintainable for long-form content but less real-time than generated docs
  • Separate test pipelines per language (py/js/go) in Cloud Build

    • Why: Each language needs its own runtime, package manager, and test framework; parallelization reduces CI time
    • Consequence: Increased YAML config duplication; harder to share common test logic, but clearer per-language visibility
  • Monorepo structure with multiple SDKs and samples

    • Why: Single source of truth for tool definitions, shared docs, coordinated releases
    • Consequence: Larger repo size; requires careful CODEOWNERS and label rules to prevent cascade failures
  • Cloud Build for integration tests rather than GitHub Actions only

    • Why: Better support for complex multi-step workflows, GCP resource access, and database provisioning
    • Consequence: Adds external dependency and cost; more opaque logs than GitHub Actions

🚫Non-goals (don't propose these)

  • Does not provide a GUI or web UI for database management; focuses on programmatic tool access
  • Does not handle database authentication directly; delegates to SDKs and user configuration
  • Does not support real-time database synchronization or streaming; designed for request-response patterns
  • Not a replacement for ORM libraries or query builders; complements them with tool-centric abstractions

🪤Traps & gotchas

Multi-SDK release complexity: SDKs are published to separate registries (PyPI, npm, Maven Central, pkg.go.dev) with independent version numbers—a change to core logic may require coordinated releases across all four. Test environment requirements: .ci/sample_tests/ integration tests likely require a running database (hotels example suggests SQL database with specific schema) and all three language runtimes available. Rename artifact confusion: Old references to 'genai-toolbox' may lurk in docs, build configs, or import paths. Hugo docs dependency: Docs build requires Hugo + Docsy theme (see go.mod); missing this causes doc build failures.

🏗️Architecture

💡Concepts to learn

  • Model Context Protocol (MCP) — The foundational protocol this entire project implements; understanding MCP's request/response patterns and tool definitions is essential to extend or debug the server.
  • Semantic Search (Vector Embeddings) — The toolbox includes semantic search capabilities for NL2SQL; knowing how embeddings map natural language to database queries is key to building AI-native database interactions.
  • Natural Language to SQL (NL2SQL) — A core feature allowing AI agents to generate SQL from natural language; understanding the constraints and safety patterns is critical for custom tool development.
  • Multi-language SDK Distribution — The toolbox maintains SDKs across Go, Python, JS/TS, and Java with independent version cycles; knowing how to keep them in sync and test them is vital for contributions.
  • Cloud Build Integration (Google Cloud) — The .ci/ directory uses Google Cloud Build YAML for CI/CD; understanding this config format is necessary to modify test pipelines or add new integration environments.
  • Tool Provider Pattern (Extensibility) — The framework uses a provider pattern to define custom tools at runtime; this architectural pattern allows users to safely sandbox database access and define schemas declaratively.
  • Hugo Static Site Generation + Docsy Theme — Documentation is built with Hugo and the Google Docsy theme; modifying docs or adding versioned documentation requires familiarity with this tech stack.
  • googleapis/mcp-toolbox-sdk-go — Official Go SDK package for building and running tools; the primary companion repo for Go developers extending this server.
  • anthropics/anthropic-sdk-python — Equivalent MCP client library for Python; used alongside mcp-toolbox to build AI agents that invoke database tools.
  • googleapis/python-bigquery — Google Cloud BigQuery Python client; shows how to integrate Google Cloud databases with this toolbox's semantic search and NL2SQL patterns.
  • gpt-index/llama_index — Vector indexing and semantic search framework; relevant for understanding the semantic search and embedding-based query features in mcp-toolbox.
  • googleapis/genai — Google's generative AI SDK for Gemini; shows how Gemini CLI integrates with mcp-toolbox servers for database access in agentic workflows.

🪄PR ideas

To work on one of these in Claude Code or Cursor, paste: Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.

Add integration test coverage for multiple language SDKs with unified CI workflow

The repo has language-specific integration test configs (.ci/sample_tests/quickstart/*.integration.cloudbuild.yaml for go/js/py) but no unified test harness or reporting mechanism. Create a .github/workflows/integration-tests.yaml that orchestrates these tests, aggregates results, and reports failures back to PRs. This fills the gap between .ci/sample_tests/run_tests.sh and actual GitHub Actions visibility.

  • [ ] Create .github/workflows/integration-tests.yaml that triggers on PR/push to main
  • [ ] Reference existing .ci/sample_tests/setup_hotels.sql and quickstart configs
  • [ ] Add reporting that parses cloudbuild.yaml results and posts to GitHub check runs
  • [ ] Document in contributing guide how to run integration tests locally using .ci/sample_tests/run_tests.sh

Implement automated API documentation linting in CI without reliance on external lint scripts

The repo has .ci/lint-docs-source-page.sh and .ci/lint-docs-tool-page.sh scripts but no GitHub Action workflow that enforces these checks on every PR. The .github/workflows/docs_lint.yaml exists but there's no integration with the specific MCP toolbox documentation structure. Add a workflow that validates .hugo content structure and catches broken doc links early.

  • [ ] Create .github/workflows/docs-lint-mcp.yaml that runs on changes to .hugo/ directory
  • [ ] Integrate existing .ci/lint-docs-source-page.sh and .ci/lint-docs-tool-page.sh as workflow steps
  • [ ] Add schema validation for .hugo/archetypes/default.md against actual tool documentation pages
  • [ ] Add check for missing SDK language examples in documentation (go/js/py from .ci/sample_tests/)

Add SDK version consistency checks and automated dependency audit workflow

The repo manages multiple language SDKs (Python, Go, JavaScript based on .ci/sample_tests structure) but .github/renovate.json5 and dependency management appears minimally configured. Create a workflow that validates semantic versioning alignment across SDKs and checks for security vulnerabilities in both go.mod and transitive dependencies (particularly docsy v0.11.0 and hugo-notice).

  • [ ] Create .github/workflows/dependency-audit.yaml to run 'go mod audit' and check for known vulnerabilities
  • [ ] Add validation that SDK version tags across go/js/py remain in sync (parse from version files in each language dir)
  • [ ] Integrate with GitHub's Dependabot alerts for docsy and hugo-notice (currently indirect deps in go.mod)
  • [ ] Add step to validate .github/renovate.json5 configuration covers all relevant go.mod dependencies

🌿Good first issues

  • Add missing type hints or test coverage to the JavaScript SDK (sdk/js/) functions exported in the .npmjs package—the codebase is 90KB JS but no test files are evident in the file list.
  • Expand the sample_tests/setup_hotels.sql schema with additional test tables (e.g., reviews, bookings) and write corresponding integration tests in .ci/sample_tests/pre_post_processing/ to cover more real-world query patterns.
  • Document the exact environment variables and database connection strings required to run .ci/sample_tests/run_tests.sh locally—add a CONTRIBUTING.md section with step-by-step setup for each language runtime (Go, JS, Python).

Top contributors

Click to expand

📝Recent commits

Click to expand
  • 8d2d521 — refactor(tools): add ScopesRequired to Tool config and interface (#3048) (duwenxin99)
  • 4f1a73d — docs: fix mcp sever command in readme (#3131) (averikitsch)
  • c739b80 — fix: enforce toolset/promptset boundary on tools/call and prompts/get (#3036) (sjhddh)
  • 929deab — chore(deps): bump fast-xml-builder from 1.1.4 to 1.2.0 in /docs/en/documentation/configuration/pre-post-processing/js/ad (dependabot[bot])
  • 5d87ef9 — chore(deps): bump google.golang.org/grpc from 1.78.0 to 1.79.3 in /docs/en/documentation/getting-started/quickstart/go/a (dependabot[bot])
  • 0649641 — chore: npm release v1.2.0 (#3195) (twishabansal)
  • 796bf91 — docs: update gemini models (#3168) (twishabansal)
  • 49794b3 — chore: update security settings in hugo config (#3190) (Yuan325)
  • 8eb3bf7 — chore: Update security settings in Hugo config (#3182) (dishaprakash)
  • 48f0000 — chore(main): release 1.2.0 (#3059) (release-please[bot])

🔒Security observations

The MCP Toolbox repository has generally good security practices with proper licensing, security policy documentation, and CI/CD structure. However, there are concerns around unverified binary downloads in the Docker build, incomplete build configuration parameters, and missing automated dependency vulnerability scanning. The codebase uses relatively modern Go versions and proper infrastructure-as-code practices. Primary recommendations focus on verifying downloaded artifacts, completing build configurations, and implementing automated security scanning in the CI/CD pipeline.

  • High · Insecure Zig Download over HTTPS without Checksum Verification — Dockerfile - RUN curl command for zig download. The Dockerfile downloads Zig compiler from ziglang.org without verifying the integrity of the binary. While HTTPS is used, there is no checksum verification (SHA256, GPG signature, etc.) which could allow for supply chain attacks if the CDN or connection is compromised. Fix: Add checksum verification after downloading: verify the SHA256 hash or GPG signature of the downloaded file before extracting. Example: echo '<expected_hash> zig.tar.xz' | sha256sum -c -
  • Medium · Dependency Vulnerability in hugo-notice — go.mod - hugo-notice dependency. The dependency 'github.com/martignoni/hugo-notice' is pinned to version 0.0.0-20240707105359-40327ac00cc4 (a pseudo-version). This appears to be from a specific commit rather than a stable release. Pseudo-versions can be problematic for reproducibility and security updates. Fix: Update to use a stable release version if available, or document why this pseudo-version is necessary. Monitor this dependency for security updates.
  • Medium · Incomplete Dockerfile Build Type Parameter — Dockerfile - ARG BUILD_TYPE line. The Dockerfile ARG 'BUILD_TYPE' is set to 'con' which appears to be incomplete (truncated). This could indicate incomplete configuration or build-time secrets that may have been accidentally committed. Fix: Complete and verify all ARG declarations. Ensure no secrets or sensitive build configurations are embedded in the Dockerfile. Use build secrets via --secret flag if needed.
  • Low · Database SQL Setup File in Repository — .ci/sample_tests/setup_hotels.sql. The file '.ci/sample_tests/setup_hotels.sql' contains database schema setup code. While this appears to be for testing purposes, ensure it doesn't contain any production database credentials, API keys, or sensitive data. Fix: Review the SQL file to ensure it contains only test/sample data. Add to .gitignore if it ever contains real credentials. Consider documenting that this is for testing only.
  • Low · Go Version Constraint May Miss Security Patches — go.mod - go version. The go.mod specifies 'go 1.23.2' without minor version flexibility. This is appropriate for reproducibility but ensure regular updates are performed to receive Go security patches and updates. Fix: Establish a schedule to regularly update the Go version in go.mod to incorporate security patches. Consider using dependabot or similar tools for automated updates.
  • Low · Missing SBOM and Dependency Scanning — CI/CD workflows and build configuration. No evidence of Software Bill of Materials (SBOM) generation or automated dependency vulnerability scanning in the provided CI/CD configuration snippets. The repository uses Google Cloud Build but no explicit security scanning step is visible. Fix: Add automated dependency scanning using tools like 'go list -json ./...', Trivy, or Snyk. Generate and publish SBOMs for releases. Include security scanning in the CI/CD pipeline.

LLM-derived; treat as a starting point, not a security audit.


Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.

Healthy signals · googleapis/mcp-toolbox — RepoPilot