Jules MCP Server
MCP server that exposes Google Jules capabilities using @google/jules-sdk. This unified implementation uses the SDK plus direct API calls where needed, while keeping SDK-backed caching, snapshots, and artifact handling. MCP tools may use either the SDK or the REST API, whichever is the best fit for the specific operation.
Setup
- Install dependencies
- Provide
JULES_API_KEYvia environment or~/.jules/config.json - Build the server
npm install
npm run build
Run locally:
JULES_API_KEY=your_api_key node dist/cli.js
OpenCode Integration
This repo includes a project-level OpenCode config at .opencode/opencode.json. For global setup, add to ~/.config/opencode/opencode.json (update the command path to where you built this server):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"jules": {
"type": "local",
"command": ["node", "/path/to/your/jules-mcp/dist/cli.js"],
"environment": {
"JULES_API_KEY": "your_api_key"
}
}
}
}
Antigravity Integration
Example OpenCode plugin enablement snippet (merge into your config):
{
"$schema": "https://opencode.ai/config.json",
"plugins": {
"opencode-antigravity-auth": {
"enabled": true
}
}
}
Tools
SDK Tools
| Tool | Purpose | Key Params | Returns |
|---|---|---|---|
create_session |
Create a new Jules session or automated run (supports repoless sessions). | prompt (req)repo``branch``interactive``autoPr |
Session created. ID: <sessionId> |
list_sessions |
List recent sessions with pagination. | pageSize``pageToken |
{ sessions: [...], nextPageToken? } |
get_session_state |
Session dashboard (status, last activity/message, pending plan). | sessionId (req) |
Status object with activity/message/plan context |
send_reply_to_session |
Approve plan, send a message, or ask and wait for a reply. | sessionId (req)action (approve/send/ask)message (send/ask) |
Confirmation or agent reply |
get_code_review_context |
Summarize code changes with file list and metadata. | sessionId (req)activityId``format``filter``detail |
Formatted summary string |
show_code_diff |
Get the unified diff for a session or file. | sessionId (req)file``activityId |
Unified diff text |
query_cache |
Query the local cache using JQL. | query (req) |
{ results: [...], _meta? } |
Query example:
{
"query": {
"from": "sessions",
"where": { "state": "failed" },
"limit": 5
}
}
Additional Tools (`jules_*`)
These tools are part of the same unified server and expose REST-style workflows plus convenience operations. They may use the SDK or the REST API under the hood, depending on which path is required for the operation. They return a structured ToolResult object:
{ success, message, data?, error?, suggestedNextSteps? }
| Tool | Purpose | Key Params | Notes |
|---|---|---|---|
jules_list_sources |
List connected repositories. | pageSize``pageToken |
Returns { sources, hasMore, nextPageToken } |
jules_get_source |
Get details for a connected repository. | source (req) |
Accepts sources/github/owner/repo or owner/repo |
jules_create_session |
Create a session with automation settings. | prompt (req)repo (req)branch``title``automationMode``requirePlanApproval |
Draft PR falls back to AUTO_CREATE_PR if not supported |
jules_get_session |
Get session status/details. | sessionId (req) |
— |
jules_list_sessions |
List sessions with pagination. | pageSize``pageToken |
— |
jules_approve_plan |
Approve a pending plan. | sessionId (req) |
— |
jules_reject_plan |
Reject a plan with feedback. | sessionId (req)feedback |
Uses REST endpoint |
jules_send_message |
Send a message to a session. | sessionId (req)message (req) |
— |
jules_cancel_session |
Cancel a running session. | sessionId (req) |
Uses REST endpoint |
jules_list_activities |
List activities in a session. | sessionId (req)pageSize``pageToken |
— |
jules_get_latest_activity |
Get most recent activity. | sessionId (req) |
— |
jules_get_session_plan |
Get latest plan (if generated). | sessionId (req) |
Plan rejection detection uses REST activity listing |
jules_wait_for_completion |
Wait for completion or timeout. | sessionId (req)timeoutMs``pollIntervalMs |
— |
jules_wait_for_plan |
Wait for plan generation. | sessionId (req)timeoutMs |
— |
jules_create_and_wait |
Create and optionally wait for completion. | prompt (req)repo (req)branch``title``automationMode``waitForCompletion``timeoutMs``requirePlanApproval |
Draft PR falls back to AUTO_CREATE_PR if not supported |
jules_quick_task |
Create session with defaults and wait. |
Tools 11
create_sessionCreate a new Jules session or automated run.list_sessionsList recent sessions with pagination.get_session_stateGet session dashboard status.send_reply_to_sessionApprove plan, send a message, or ask and wait for a reply.get_code_review_contextSummarize code changes with file list and metadata.show_code_diffGet the unified diff for a session or file.query_cacheQuery the local cache using JQL.jules_create_sessionCreate a session with automation settings.jules_approve_planApprove a pending plan.jules_reject_planReject a plan with feedback.jules_create_and_waitCreate and optionally wait for completion.Environment Variables
JULES_API_KEYrequiredAPI key for authenticating with Google Jules services.