This project has been archived by its maintainers, and is no longer receiving any updates.
wse-dev-mcp-client
Local stdio ↔ HTTP MCP proxy for the Iceberg Data wse-dev MCP deployed on Cloud Run.
This is the client side of a split MCP architecture. The server (with the real WSE-ops tools — Firestore queries, job debugging, test enqueue, etc.) runs on Cloud Run under IAM control; this tiny package runs on each developer's machine as a stdio MCP server and forwards every request to Cloud Run with an auto-refreshed Google identity token.
Claude Code (stdio) → wse-dev-mcp-client (local) → Cloud Run (HTTP + ID token)
│
└─ On each call: gcloud auth print-identity-token
(cached 55 min; invisible refresh)
No tokens to paste. No wrapper scripts to rerun. Access is gated by Cloud Run IAM (roles/run.invoker) — if your Google identity has it, the proxy works; if not, Cloud Run returns 403.
Prerequisites
- Python 3.11+
- gcloud CLI on your
PATH, logged in with an identity that hasrun.invokeron the target MCP service.- One-time:
gcloud auth login
- One-time:
- Claude Code (or any MCP-capable client)
Install
With pipx (recommended — keeps the proxy in its own isolated env):
pipx install wse-dev-mcp-client
Or with uv:
uv tool install wse-dev-mcp-client
Plain pip works too:
pip install --user wse-dev-mcp-client
Register with Claude Code
claude mcp add wse-dev wse-dev-mcp-client \
--scope user \
-e WSE_DEV_MCP_URL=https://your-cloud-run-mcp-url
Replace https://your-cloud-run-mcp-url with the Cloud Run URL of your deployed MCP server. For Iceberg Data developers, ask a teammate or run:
gcloud run services describe wse-dev-mcp \
--region=us-west1 --project=iceflow \
--format='value(status.url)'
Verify with claude mcp list — you should see wse-dev: ... ✓ Connected.
How it works
On each MCP call:
- Claude Code writes a JSON-RPC message to the proxy's stdin.
- The proxy consults its in-memory token cache (TTL 55 min). If expired or empty, it subprocesses
gcloud auth print-identity-tokento mint a fresh Google identity token. - The message is forwarded over HTTPS to the Cloud Run URL with
Authorization: Bearer <id-token>. - Cloud Run IAM validates the token; if the caller has
roles/run.invokeron the service, the MCP server handles the request and streams the response back. - The proxy pumps the response over stdout to Claude Code.
That's the whole package. ~150 lines of Python.
Failure modes
| Symptom | Cause | Fix |
|---|---|---|
gcloud CLI not found on startup |
gcloud not on PATH | Install Google Cloud SDK and re-register |
gcloud identity-token fetch failed |
Not logged in | gcloud auth login |
| MCP calls return 403 | Your identity lacks run.invoker on the service |
Ask the project admin to grant it |
WSE_DEV_MCP_URL env var not set |
Missing -e flag in claude mcp add |
Re-register with the env var |
Configuration
| Env var | Default | Purpose |
|---|---|---|
WSE_DEV_MCP_URL |
(required) | Base URL of the Cloud Run MCP, without trailing slash. The proxy appends /mcp. |
Compatibility
- Python: 3.11, 3.12, 3.13, 3.14
- OS: Linux, macOS; Windows untested (should work with WSL)
- Claude Code: any version supporting stdio MCP transport (most recent clients)
License
MIT. © 2026 Iceberg Data LLC.
Related
- Model Context Protocol
- Anthropic Claude Code
- The server side lives in the private
agent-global-configrepo at.agents/mcp-servers/wse-dev/.
Metadata
Release files for wse-dev-mcp-client 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| wse_dev_mcp_client-0.1.0.tar.gz | 7.9 kB | Without provenance | Details for wse_dev_mcp_client-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| wse_dev_mcp_client-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for wse_dev_mcp_client-0.1.0-py3-none-any.whl |
Total release size: 14.8 kB
Release files / wse_dev_mcp_client-0.1.0.tar.gz
| Download URL | wse_dev_mcp_client-0.1.0.tar.gz |
|---|---|
| Size | 7.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e66435f7d65f6b39c4a6cc0aa00a69dddf381e2f3c7605a49cfe850fab48a259
|
|
BLAKE2b-256 checksum How to use checksums |
f1e3809b0d9077b2f65caa1b72f221fc592c626dbff7d5e3da2675165d0cc4a7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.3
|
Release files / wse_dev_mcp_client-0.1.0-py3-none-any.whl
| Download URL | wse_dev_mcp_client-0.1.0-py3-none-any.whl |
|---|---|
| Size | 6.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
20a4de6f6326026f2ec972e14a4bc8ff99c50cd775328ed527c2c1466b8eaeca
|
|
BLAKE2b-256 checksum How to use checksums |
205380ac38244c41c9653904e00e7393283ce1ce6bccdb7dbeab3cc62c8afb08
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.3
|
Security for wse-dev-mcp-client 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.