chatgpt-jules-mcp
Enables interaction with GitHub repositories through Google Jules, supporting session creation, plan approval, and activity retrieval for automated code workflows.
Provides tools to manage Google Jules sessions, including creating, monitoring, and interacting with Jules agents for automated code review and repository management.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@chatgpt-jules-mcpcreate a session to fix bug in my-org/my-repo"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
chatgpt-jules-mcp
Secure MCP server allowing ChatGPT to manage Google Jules sessions through OpenAI Secure MCP Tunnel.
Architecture
ChatGPT
-> OpenAI Secure MCP Tunnel
-> tunnel-client (your MacBook)
-> chatgpt-jules-mcp (stdio)
-> jules-agent-sdk
-> Google Jules
-> GitHub repositoryNo public HTTP. No Tailscale Funnel. No raw arbitrary HTTP.
Related MCP server: MCP Shell Server
Security Features
Policy-based access control (
policy.yaml) — allowlist sources, titles, toolsConfirmation gate for
jules.approve_planAudit logging (JSONL) — every tool call recorded with metadata
Secret redaction — JULES_API_KEY, tokens, private keys scrubbed from all output
Rate limiting — per-tool, configurable via policy
Error boundary — all exceptions caught, sanitized, never leak secrets
No generic HTTP tools — only Jules-specific operations
Quick Start
# Install from PyPI
pip install chatgpt-jules-mcp
# Or install in development mode
pip install -e ".[dev]"
# Set credentials
export JULES_API_KEY="your-jules-api-key"
# Configure policy
mkdir -p ~/.config/chatgpt-jules-mcp
cp config/policy.example.yaml ~/.config/chatgpt-jules-mcp/policy.yaml
# Edit: add your sources to allowed_sources
# Run MCP server (module)
python -m chatgpt_jules_mcp
# Or with CLI script (installed via pip)
chatgpt-jules-mcp
# Or with custom config
python -m chatgpt_jules_mcp --config /path/to/policy.yaml
chatgpt-jules-mcp --config /path/to/policy.yamlMCP Tools (14)
Tool | Category | Description |
| Diagnostics | Server status, API key check, policy load |
| Sources | List allowed GitHub sources |
| Sources | Get single source details |
| Sources | Fuzzy search sources (client-side) |
| Sessions | Create Jules session with policy checks |
| Sessions | Get session status |
| Sessions | List sessions (filtered by policy) |
| Sessions | Approve plan (requires confirmation) |
| Sessions | Send follow-up message |
| Sessions | Poll until session completes |
| Activities | List session activities |
| Activities | Get single activity |
| Convenience | Best-effort session summary |
| Convenience | Extract final result from activities |
Project Structure
chatgpt-jules-mcp/
├── src/chatgpt_jules_mcp/
│ ├── server.py # FastMCP server, tool registration
│ ├── policy.py # Policy engine (YAML load, validate, enforce)
│ ├── audit.py # JSONL audit logger
│ ├── redaction.py # Secret pattern redaction
│ ├── errors.py # Custom exceptions, error boundary
│ ├── ratelimit.py # In-memory rate limiter
│ ├── shutdown.py # Graceful shutdown (SIGTERM/SIGINT)
│ ├── tools/
│ │ ├── health.py # jules.health
│ │ ├── sources.py # list_sources, get_source, find_source
│ │ ├── sessions.py # create_session, get_session, list_sessions, approve_plan, send_message, wait_for_completion
│ │ ├── activities.py # list_activities, get_activity
│ │ └── convenience.py # summarize_session, extract_result
├── tests/ # 50 tests across 10 test files
├── config/
│ └── policy.example.yaml # Example policy configuration
├── scripts/
│ └── emergency-stop.sh # Kill switch
└── docs/
└── openai-secure-mcp-tunnel.md # Tunnel setup guideConfiguration
Policy is controlled via ~/.config/chatgpt-jules-mcp/policy.yaml:
jules:
allowed_sources:
- "sources/your-repo"
default_require_plan_approval: true
sessions:
allowed_title_prefixes:
- "ChatGPT:"
max_prompt_chars: 12000
max_message_chars: 8000
tools:
allow:
- "jules.health"
- "jules.list_sources"
# ... see policy.example.yaml for full list
require_confirmation:
- "jules.approve_plan"
audit:
path: "~/.local/share/chatgpt-jules-mcp/audit.jsonl"
redact_secrets: trueTests
pip install pytest pytest-asyncio
PYTHONPATH=src python -m pytest tests/ -v50 tests covering: policy engine, audit logging, redaction, rate limiting, all 13 tools, error handling.
OpenAI Secure MCP Tunnel
See docs/openai-secure-mcp-tunnel.md for full setup.
Quick version:
export CONTROL_PLANE_API_KEY="sk-..."
export CONTROL_PLANE_TUNNEL_ID="tunnel_..."
export JULES_API_KEY="..."
tunnel-client init \
--sample sample_mcp_stdio_local \
--profile chatgpt-jules-mcp-local \
--tunnel-id "$CONTROL_PLANE_TUNNEL_ID" \
--mcp-command "python -m chatgpt_jules_mcp"
tunnel-client doctor --profile chatgpt-jules-mcp-local --explain
tunnel-client run --profile chatgpt-jules-mcp-localEmergency Stop
./scripts/emergency-stop.shLicense
Apache-2.0
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Danissimode/CatGPT_mcp_to_jules'
If you have feedback or need assistance with the MCP directory API, please join our Discord server