Local stdio↔HTTP MCP proxy that talks to Iceberg Data's wse-dev MCP Cloud Run deploy. Auto-refreshes Google identity tokens via gcloud for transparent Cloud Run IAM auth — zero manual token juggling.
This project has been archived.
The maintainers of this project have marked this project as archived. No new releases are expected.
Project description
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/.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file wse_dev_mcp_client-0.1.0.tar.gz.
File metadata
- Download URL: wse_dev_mcp_client-0.1.0.tar.gz
- Upload date:
- Size: 7.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e66435f7d65f6b39c4a6cc0aa00a69dddf381e2f3c7605a49cfe850fab48a259
|
|
| MD5 |
edd9933e753788f1aceb5ab4fdb4071a
|
|
| BLAKE2b-256 |
f1e3809b0d9077b2f65caa1b72f221fc592c626dbff7d5e3da2675165d0cc4a7
|
File details
Details for the file wse_dev_mcp_client-0.1.0-py3-none-any.whl.
File metadata
- Download URL: wse_dev_mcp_client-0.1.0-py3-none-any.whl
- Upload date:
- Size: 6.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
20a4de6f6326026f2ec972e14a4bc8ff99c50cd775328ed527c2c1466b8eaeca
|
|
| MD5 |
6909f0d6d482943f983edb53e67273a7
|
|
| BLAKE2b-256 |
205380ac38244c41c9653904e00e7393283ce1ce6bccdb7dbeab3cc62c8afb08
|