Skip to main content
Glama

Jules MCP Server

Status Version

MCP (Model Context Protocol) server for Google Jules - the AI coding agent. This server enables LLMs like Claude to interact with Jules API, creating and managing coding sessions programmatically.

Architecture

The Jules MCP Server acts as a bridge between MCP-compatible clients and the Jules REST API.

┌──────────────┐      ┌──────────────────┐      ┌──────────────────┐
│  MCP Client  │      │ Jules MCP Server │      │  Jules REST API  │
│ (Claude, etc)│ ◄──► │ (stdio/HTTP)     │ ◄──► │ (googleapis.com) │
└──────────────┘      └──────────────────┘      └──────────────────┘
  1. MCP Client: An application like Claude Desktop that supports the Model Context Protocol.

  2. Jules MCP Server: This project, which exposes Jules's capabilities as MCP tools and translates them to Jules API calls.

  3. Jules REST API: The underlying Google API that powers Jules's coding capabilities.

Related MCP server: Jules MCP Server

Features

  • Session Management: Create, list, get, and delete coding sessions

  • Interactive Communication: Send messages to active sessions and approve plans

  • Activity Monitoring: Track progress through session activities

  • Source Management: List and inspect connected GitHub repositories

  • Dual Transport: Supports both stdio and HTTP transports

Prerequisites

Installation

# Clone or download the server
cd jules-mcp-server

# Install dependencies
npm install

# Build the TypeScript
npm run build

Configuration

Set your Jules API key as an environment variable:

export JULES_API_KEY="your-api-key-here"

Security

Manage your JULES_API_KEY with care:

  • Environment Variables: Always use environment variables to provide the API key. Avoid hardcoding it in source code or configuration files.

  • No Commits: Never commit your API key or .env files containing keys to version control. The .gitignore file is configured to ignore .env files.

  • Least Privilege: The Jules API key provides full access to your Jules sessions and connected repositories. Keep it secure and rotate it if you suspect it has been compromised.

  • CI/CD: When using in CI/CD environments (like GitHub Actions), use Secrets to store and inject the API key.

Usage

With Claude Desktop (stdio transport)

Add to your Claude Desktop configuration (claude_desktop_config.json):

{
  "mcpServers": {
    "jules": {
      "command": "node",
      "args": ["/path/to/jules-mcp-server/dist/index.js"],
      "env": {
        "JULES_API_KEY": "your-api-key-here"
      }
    }
  }
}

With Claude Code (CLI)

You can add this server to Claude Code by running:

claude mcp add jules --env JULES_API_KEY=your-api-key-here -- node /path/to/jules-mcp-server/dist/index.js

Command Line

# Run with stdio transport
JULES_API_KEY=your-key node dist/index.js

# Run with HTTP transport
JULES_API_KEY=your-key node dist/index.js --http

# Custom port for HTTP
JULES_API_KEY=your-key PORT=8080 node dist/index.js --http

# Show help
node dist/index.js --help

Tool Reference

The server provides a suite of tools to interact with Jules. Some tools support a response_format parameter (markdown or json); refer to each tool's documented arguments to see whether it is accepted.

Session Tools

jules_create_session

Creates a new coding session where Jules executes a task on a repository.

  • Arguments:

    • prompt (string, required): Task description.

    • sourceContext (object, required): Repository info (e.g., { "source": "sources/github-owner-repo", "githubRepoContext": { "startingBranch": "main" } }).

    • title (string, optional): Session title.

    • requirePlanApproval (boolean, optional): If Jules should wait for plan approval.

    • automationMode (string, optional): Use AUTO_CREATE_PR to automatically create a PR on completion.

    • response_format (string, optional): Response format, either markdown or json.

  • Example Response (Markdown):

    ## Session: Add auth tests
    
    **ID:** 1234567
    **State:** ⏳ QUEUED
    **Prompt:** Add unit tests for the authentication module
    **URL:** https://jules.google/session/1234567

jules_list_sessions

Lists all your coding sessions.

  • Arguments:

    • pageSize (number, optional): Max results per page (1-100, default: 20).

    • pageToken (string, optional): Token for the next page.

    • response_format (string, optional): Format for the response output.

  • Example Response (JSON):

    {
      "sessions": [
        {
          "id": "1234567",
          "title": "Add auth tests",
          "state": "IN_PROGRESS",
          "createTime": "2023-10-27T10:00:00Z"
        }
      ],
      "total": 1,
      "hasMore": false
    }

jules_get_session

Retrieves full details for a specific session, including current state, URL, and outputs (like PR links) if completed.

  • Arguments:

    • sessionId (string, required): The ID of the session.

    • response_format (string, optional): 'markdown' (default) or 'json'.

  • Example Response (Markdown):

    ## Session: Add auth tests
    
    **ID:** 1234567
    **State:** ✅ COMPLETED
    **Prompt:** Add unit tests for the authentication module
    **URL:** https://jules.google/session/1234567
    
    **Created:** Oct 27, 2023, 10:00 AM
    **Updated:** Oct 27, 2023, 10:45 AM
    
    ### Outputs
    
    **Pull Request:** [Add auth unit tests](https://github.com/myorg/myrepo/pull/42)
    
    > This PR adds comprehensive unit tests for the auth module.
  • Example Response (JSON):

    {
      "id": "1234567",
      "title": "Add auth tests",
      "prompt": "Add unit tests for the authentication module",
      "state": "COMPLETED",
      "url": "https://jules.google/session/1234567",
      "outputs": [
        {
          "pullRequest": {
            "title": "Add auth unit tests",
            "url": "https://github.com/myorg/myrepo/pull/42",
            "description": "This PR adds comprehensive unit tests for the auth module."
          }
        }
      ],
      "createTime": "2023-10-27T10:00:00Z",
      "updateTime": "2023-10-27T10:45:00Z"
    }

jules_delete_session

Deletes a coding session. This cannot be undone.

  • Arguments:

    • sessionId (string, required): The ID of the session.

jules_send_message

Sends a message to an active session. Use this to provide feedback, answer Jules's questions, or change instructions mid-session.

  • Arguments:

    • sessionId (string, required): The ID of the session.

    • prompt (string, required): Your message.

jules_approve_plan

Approves a pending plan. Required if requirePlanApproval was set to true during session creation. Once approved, Jules begins execution.

  • Arguments:

    • sessionId (string, required): The ID of the session.

Activity Tools

jules_list_activities

Lists all activities (events, plan generation, code changes, messages) for a session.

  • Arguments:

    • sessionId (string, required): The ID of the session.

    • pageSize (number, optional): Results per page. Must be between 1 and 100. Defaults to the schema-defined default when omitted.

    • pageToken (string, optional): Pagination token.

    • response_format (string, optional): Response format for the returned activities.

jules_get_activity

Gets detailed information about a specific activity. This is how you view code diffs (changeSet), bash outputs, or full plan details.

  • Arguments:

    • sessionId (string, required): The ID of the session.

    • activityId (string, required): The activity ID.

    • response_format (string, optional): Controls the format of the returned activity details.

Source Tools

jules_list_sources

Lists GitHub repositories connected to your Jules account via the Jules web UI.

  • Arguments:

    • filter (string, optional): Filter by name (e.g., name=sources/github-owner-repo).

    • pageSize (number, optional): Results per page.

    • pageToken (string, optional): Pagination token.

    • response_format (string, optional): Response format for the returned data.

jules_get_source

Gets details about a specific connected repository, including all available branches.

  • Arguments:

    • sourceId (string, required): The source ID (e.g., github-owner-repo). This is not the sources/... resource name used by sourceContext.source.

    • response_format (string, optional): Controls the response format returned by the tool.

Real-World Examples

Complete Workflow: Implementing a Feature

  1. Find the repository ID: jules_list_sources() -> returns sources/github-acme-webapp.

  2. Start the session: jules_create_session(prompt="Add a search bar to the header", sourceContext={"source": "sources/github-acme-webapp"}, requirePlanApproval=true) -> returns sessionId 7890.

  3. Check for a plan: jules_list_activities(sessionId="7890"). Look for an activity with "Plan Generated".

  4. Review and approve: jules_get_activity(sessionId="7890", activityId="plan_activity_id"). If the plan looks good: jules_approve_plan(sessionId="7890").

  5. Monitor progress: Periodically call jules_get_session(sessionId="7890") to check state or jules_list_activities to see recent actions.

  6. Review the result: Once state is COMPLETED, check jules_get_session for the Pull Request URL.

Session States

State

Description

QUEUED

Session created, waiting for processing.

PLANNING

Jules is analyzing the codebase and creating a plan.

AWAITING_PLAN_APPROVAL

Plan is ready and requires your approval to proceed.

AWAITING_USER_FEEDBACK

Jules has a question or needs more information.

IN_PROGRESS

Jules is executing the task/plan.

PAUSED

Execution has been temporarily halted.

COMPLETED

Task finished successfully (check for PR link).

FAILED

Task failed. Check activities for error details.

Troubleshooting

Error

Meaning

Resolution

401 Unauthorized

Invalid API Key

Check your JULES_API_KEY environment variable and ensure it's valid.

403 Forbidden

Permission Denied

Ensure your API key has access to the requested resource or repository.

404 Not Found

Resource Missing

Verify the sessionId, activityId, or sourceId is correct.

429 Too Many Requests

Rate Limited

You've exceeded the API rate limit. Wait a few minutes before retrying.

500 / 503

Jules API Error

The Jules service is experiencing issues. Try again later or check Jules Status.

ECONNREFUSED

Network Error

Check your internet connection or firewall settings.

Development

# Install dependencies
npm install

# Build
npm run build

# Type-check without emitting files
npm run check

# Lint source files
npm run lint

# Check formatting
npm run format:check

# Development mode (watch)
npm run dev

Contributing

We welcome contributions! See CONTRIBUTING.md for more details.

  1. Check Issues: Look for existing issues or open a new one to discuss your proposed change.

  2. Local Setup: Follow the Installation steps.

  3. Topic Branches: Always work on a new branch (git checkout -b feature/my-feature).

  4. Testing: If adding a tool, ensure it's tested. Run npm run check and npm run lint.

  5. Documentation: Update the README if you change tool behavior or add new features.

  6. Pull Requests: Submit a PR with a clear description of the changes.

Project hygiene and community documents:

API Reference

Based on Jules REST API:

License

MIT

Available Tools

10 tools
jules_approve_planApprove Jules Session PlanA
Idempotent

Approve a pending plan in a Jules session.

Only needed when the session was created with requirePlanApproval=true. After approval, Jules will execute the planned steps.

Args:

  • sessionId (string, required): The session ID with pending plan

Returns: Confirmation that the plan was approved.

Note: Check session state is 'AWAITING_PLAN_APPROVAL' before calling.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesThe session ID with the plan to approve

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral context beyond the annotations: the consequence ('After approval, Jules will execute the planned steps') and the required precondition (session state check). The annotations already indicate readOnlyHint=false and idempotentHint=true, but the description enriches understanding of the tool's effect without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (Args, Returns, Note) and no redundant fluff. It is appropriately sized for the tool's simplicity, though slight trimming of repetition in the parameter line could make it even more concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool, the description covers the purpose, return value, and a critical precondition. It does not elaborate on error behaviors (e.g., what happens if the session is not awaiting approval), but the provided information is sufficient for a straightforward approval action.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides full coverage for the single parameter (sessionId), including a description. The description's mention of 'session ID with pending plan' adds no substantive meaning beyond the schema. With 100% schema coverage, the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function with a specific verb and resource: 'Approve a pending plan in a Jules session.' It is distinct from sibling tools like jules_get_session or jules_send_message, which handle different operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides a clear condition for use ('Only needed when the session was created with requirePlanApproval=true') and a prerequisite ('Check session state is AWAITING_PLAN_APPROVAL before calling'). However, it does not explicitly mention what to use instead when those conditions are not met, so it lacks the explicit 'when-not' guidance for a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jules_create_sessionCreate Jules SessionA

Create a new coding session with Jules AI coding agent.

A session represents a unit of work where Jules executes a coding task on your repository.

Args:

  • prompt (string, required): The task description for Jules to execute

  • title (string, optional): Title for the session

  • sourceContext (object, required): Repository context with:

    • source (string): Resource name like 'sources/github-owner-repo'

    • githubRepoContext (object, optional): { startingBranch: string }

  • requirePlanApproval (boolean, optional): If true, plans need approval

  • automationMode (string, optional): 'AUTO_CREATE_PR' to auto-create PRs

  • response_format ('markdown' | 'json'): Output format

Returns: The created session with ID, state, and URL.

Examples:

  • "Add unit tests for auth module" with source "sources/github-myorg-myrepo"

  • Set requirePlanApproval=true to review plans before execution

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoOptional title for the session
promptYesThe task description for Jules to execute
sourceContextYesThe source repository and branch context
automationModeNoAutomation mode: 'AUTO_CREATE_PR' to auto-create PRs when ready
response_formatNoOutput format: 'markdown' for human-readable or 'json' for structured datamarkdown
requirePlanApprovalNoIf true, plans require explicit approval before execution

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate this is a write operation (readOnlyHint=false), and the description adds behavioral context: it creates a new session and returns ID/state/URL. It also explains how requirePlanApproval and automationMode alter execution. This goes beyond the minimal hints, though it doesn't detail failure modes or source validation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with Args, Returns, and Examples sections, making it scannable. It repeats some schema details but not excessively. The purpose sentence is front-loaded. It earns a solid 4, slightly loses a point for redundancy with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

All six parameters are described, including nested objects, and it explains the return value (ID, state, URL) which is essential given there is no output schema. Examples clarify usage patterns. This is complete for an agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the description does not need to compensate for missing schema docs. It largely restates the schema parameter descriptions with minor additions like example source values and format clarification. This meets the baseline but adds little beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Create a new coding session with Jules AI coding agent,' which is a specific verb+resource statement that clearly distinguishes this from sibling tools like get/list/delete. The conceptual sentence about sessions further clarifies the tool's unique role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context about what a session represents and includes examples of typical use. However, it does not explicitly state when not to use it or point to alternatives (e.g., 'for existing sessions, use jules_get_session'), so it falls short of full exclusionary guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jules_delete_sessionDelete Jules SessionA
DestructiveIdempotent

Delete a coding session.

Args:

  • sessionId (string, required): The session ID to delete

Returns: Confirmation of deletion.

Note: This action cannot be undone.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesThe session ID to delete

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already provide destructiveHint and idempotentHint, but the description augments this with 'This action cannot be undone,' which emphasizes irreversibility. It also forecasts the return value ('Confirmation of deletion'), adding behavioral insight beyond the structured metadata. No contradiction exists between the description and annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and front-loaded with the purpose statement, then organized into Args/Returns/Note sections. Each line has a purpose, and the irreversibility note is placed at the end for emphasis without wasting words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter delete operation with full annotations, the description covers the essential aspects: what it does, what it takes, what it returns, and its irreversibility. It doesn't explore edge cases or side effects, but the openWorldHint annotation suggests unspecified external effects, and the description's simplicity matches the tool's low complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides 100% description coverage for the sessionId parameter with the same wording ('The session ID to delete'). The description's Args section repeats this without adding detail about ID format, acquisition, or constraints beyond the schema, so it meets the baseline but provides no extra semantic value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Delete a coding session,' using a specific verb and resource that clearly distinguishes it from sibling tools like jules_get_session and jules_create_session. The irreversibility note reinforces that this is the deletion action, eliminating ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool's use case (when you need to permanently delete a session) but does not explicitly state when to use it versus alternatives. There is no mention of conditions such as 'use this instead of archiving' or 'do not use if session is still needed,' so the guidance is implicit rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jules_get_activityGet Session ActivityA
Read-onlyIdempotent

Get details of a specific activity in a Jules session.

Retrieves full details including artifacts like code changes, bash output, or media files.

Args:

  • sessionId (string, required): The session ID

  • activityId (string, required): The activity ID

  • response_format ('markdown' | 'json'): Output format

Returns: Full activity details including:

  • Event type (plan generated, message, progress, etc.)

  • Artifacts (code changes, command output, media)

  • Timestamps

Examples:

  • Get plan details: activity with planGenerated

  • Get code diff: activity with changeSet artifact

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesThe session ID
activityIdYesThe activity ID
response_formatNoOutput format: 'markdown' for human-readable or 'json' for structured datamarkdown

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds additional behavioral context by detailing what the tool returns (full activity details, artifacts like code changes, bash output, media files, event types, timestamps) and by explaining the response_format parameter's effect. This goes beyond simple annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, retrieval details, args, returns, examples). It is somewhat repetitive of schema information but remains reasonably concise. Every sentence earns its place, though it could be slightly trimmed without losing insight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 3 parameters, 100% schema coverage, and no output schema, the description is complete: it fully explains the input parameters, enumerates the return contents (event type, artifacts, timestamps), and provides actionable examples. The agent has sufficient context to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds practical meaning beyond the schema by illustrating parameter usage with examples (e.g., using activityId to retrieve planGenerated or changeSet artifacts), which helps the agent understand how to select appropriate values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get details of a specific activity in a Jules session.' It uses a specific verb ('Get details') and resource ('activity'), and distinguishes itself from sibling tools like jules_list_activities, which lists activities rather than retrieving detailed info for a single one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by noting required parameters (sessionId, activityId) and provides concrete examples (e.g., 'Get plan details: activity with planGenerated', 'Get code diff: activity with changeSet artifact'). However, it does not explicitly name alternatives or state when not to use this tool, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jules_get_sessionGet Jules SessionA
Read-onlyIdempotent

Get details of a specific coding session.

Args:

  • sessionId (string, required): The session ID

  • response_format ('markdown' | 'json'): Output format

Returns: Full session details including:

  • State and progress

  • Source context

  • Outputs (pull requests if completed)

Examples:

  • Get session details: sessionId="1234567"

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesThe session ID (e.g., '1234567')
response_formatNoOutput format: 'markdown' for human-readable or 'json' for structured datamarkdown

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds meaningful context beyond this by detailing the return contents (state, progress, source context, PR outputs) and explaining the effect of the response_format parameter. No contradiction with annotations is present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a clear one-sentence purpose, followed by well-structured Args, Returns, and Examples sections. Every sentence earns its place, with no waste or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with only two well-documented parameters and no output schema, the description adequately explains what the tool returns, how to call it, and shows an example. It is complete enough for an agent to select and invoke the tool correctly without additional information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with both parameters already fully described, including an enum for response_format. The description's parameter list largely duplicates the schema, adding only an example value, so it does not provide additional semantic meaning beyond what the schema already gives.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Get' and clearly identifies the resource as 'details of a specific coding session', which distinguishes it from sibling tools like list_sessions and get_activity. The verb+resource combination makes the tool's purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when a specific session ID is known and details are needed, but it does not explicitly state when not to use this tool or contrast it with alternatives such as jules_list_sessions for listing all sessions. Guidance is present but only implied, not directly articulated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jules_get_sourceGet Source DetailsA
Read-onlyIdempotent

Get details of a specific repository source.

Retrieves full information about a connected GitHub repository including all available branches.

Args:

  • sourceId (string, required): The source ID (e.g., 'github-owner-repo')

  • response_format ('markdown' | 'json'): Output format

Returns: Full source details:

  • Repository owner and name

  • Public/private status

  • Default branch

  • All available branches

Examples:

  • Get repo details: sourceId="github-myorg-myrepo"

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceIdYesThe source ID (e.g., 'github-owner-repo')
response_formatNoOutput format: 'markdown' for human-readable or 'json' for structured datamarkdown

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds useful behavioral context by specifying exactly what information will be returned (owner, visibility, default branch, all branches) and the output format options. It does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with an intro, Args section, Returns section, and Example. Every sentence adds useful information without redundancy. It is appropriately sized for the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given only two parameters, no output schema, and read-only annotations, the description is complete. It explains parameters, return structure, and provides an example. No critical information needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so the baseline is 3. The description adds extra value by providing a concrete example of sourceId format ('github-owner-repo'), explaining the response_format enum in plain language, and clearly listing the returned fields for both parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool 'Gets details of a specific repository source' with a specific verb and resource. It distinguishes itself from siblings like jules_list_sources by focusing on a single, specific source and enumerating the detailed information returned (owner, name, visibility, branches).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: it is for retrieving full details of a specific connected GitHub repository. However, it does not explicitly state when not to use it or name an alternative tool for listing all sources. The sibling list implies such a tool exists, but the description could have been more explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jules_list_activitiesList Session ActivitiesA
Read-onlyIdempotent

List all activities for a Jules coding session.

Activities track everything that happens during a session:

  • Plan generation and approval

  • User and agent messages

  • Progress updates

  • Completion or failure events

  • Code changes and artifacts

Args:

  • sessionId (string, required): The session ID

  • pageSize (number, optional): Results per page (1-100, default: 20)

  • pageToken (string, optional): Token for pagination

  • response_format ('markdown' | 'json'): Output format

Returns: List of activities with type, description, and timestamps.

Examples:

  • Monitor session progress: provide sessionId

  • Get full history: paginate through all activities

ParametersJSON Schema
NameRequiredDescriptionDefault
pageSizeNoNumber of results to return (1-100)
pageTokenNoPage token from previous response for pagination
sessionIdYesThe session ID to list activities for
response_formatNoOutput format: 'markdown' for human-readable or 'json' for structured datamarkdown

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is known. The description adds meaningful context about the activity types, return format, and pagination behavior, which goes beyond annotations and helps set expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a brief main statement, a bulleted list of activity types, an Args section, Returns line, and examples. It is not overly verbose, though the Args section duplicates schema information, slightly reducing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with four parameters and no output schema, the description covers the essential aspects: what activities are tracked, the return value shape, pagination via pageToken, and example usage. It doesn't address error cases or auth, but is sufficient for typical use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides comprehensive descriptions for all four parameters (sessionId, pageSize, pageToken, response_format), so schema coverage is 100%. The description's Args section essentially repeats the schema without adding new semantics, maintaining the baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'List all activities for a Jules coding session', which clearly identifies the verb (list) and resource (activities for a session). The bulleted list of activity types adds specificity about what is included. It does not explicitly contrast with sibling tools like jules_get_activity, but the plural 'all activities' makes the scope evident.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The examples 'Monitor session progress: provide sessionId' and 'Get full history: paginate through all activities' give practical guidance on when to use this tool. While it doesn't explicitly mention alternatives, the context of monitoring and history retrieval is clear, and the pagination hint is useful.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jules_list_sessionsList Jules SessionsA
Read-onlyIdempotent

List all coding sessions for the authenticated user.

Args:

  • pageSize (number, optional): Results per page (1-100, default: 20)

  • pageToken (string, optional): Token for pagination

  • response_format ('markdown' | 'json'): Output format

Returns: List of sessions with ID, title, state, and timestamps. Includes nextPageToken if more results exist.

Examples:

  • List recent sessions: no params needed

  • Paginate: use pageToken from previous response

ParametersJSON Schema
NameRequiredDescriptionDefault
pageSizeNoNumber of results to return (1-100)
pageTokenNoPage token from previous response for pagination
response_formatNoOutput format: 'markdown' for human-readable or 'json' for structured datamarkdown

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds meaningful context about pagination behavior (pageToken, nextPageToken) and return fields (ID, title, state, timestamps), going beyond the basic annotations. No contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: a clear purpose statement, an Args block, a Returns block, and examples. It is concise with no fluff, though the Args block somewhat duplicates the schema. The examples and return details earn their place, making it an efficient reference.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list operation with no output schema, the description adequately covers the return shape (fields and nextPageToken) and pagination. It does not discuss error cases or rate limits, but these are not essential given the simple read-only nature and strong annotations. The description is sufficiently complete for an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are already fully documented. The description reinforces this with an Args block and adds concrete usage examples (e.g., 'no params needed' and 'use pageToken from previous response'). These examples clarify practical usage beyond the schema's dry descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with 'List all coding sessions for the authenticated user,' which clearly identifies the action (list) and resource (coding sessions) with scope. This distinguishes it from siblings like get_session (singular) and list_activities/list_sources (different resource types).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides examples for default usage and pagination, but it does not explicitly state when to use this tool versus alternatives such as jules_get_session or jules_list_activities. There are no exclusions or comparison to sibling tools, leaving selection guidance implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jules_list_sourcesList Connected SourcesA
Read-onlyIdempotent

List all repository sources connected to Jules.

Sources are GitHub repositories that Jules can work with. Sources are connected through the Jules web interface.

Args:

  • pageSize (number, optional): Results per page (1-100, default: 20)

  • pageToken (string, optional): Token for pagination

  • filter (string, optional): Filter expression (e.g., 'name=sources/github-owner-repo')

  • response_format ('markdown' | 'json'): Output format

Returns: List of sources with repository details:

  • Owner and repo name

  • Public/private status

  • Available branches

Examples:

  • List all repos: no params needed

  • Filter by name: filter="name=sources/github-myorg-myrepo"

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoFilter expression (e.g., 'name=sources/github-owner-repo')
pageSizeNoNumber of results to return (1-100)
pageTokenNoPage token from previous response for pagination
response_formatNoOutput format: 'markdown' for human-readable or 'json' for structured datamarkdown

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent annotations, the description adds meaningful behavioral context: sources are GitHub repos connected via the web interface, returns include owner/repo, public/private status, and branches, and supports pagination and filtering. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with intro, Args, Returns, and Examples. Every section serves a purpose without repetition or fluff. It front-loads the core purpose and provides just enough detail to operate the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description explains return values (owner/repo, public/private, branches) and covers all four parameters, including defaults and allowed values. It is fully self-contained for a list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds concrete examples for the filter expression ('name=sources/github-myorg-myrepo') and clarifies that no params are needed for listing all sources. This goes beyond the schema's bare descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action and resource: 'List all repository sources connected to Jules.' It explains what sources are (GitHub repositories) and distinguishes itself from siblings like jules_get_source by focusing on listing all rather than retrieving a single source.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context and examples for when to use the tool: listing all repos with no params or filtering by name. It does not explicitly mention alternatives like jules_get_source, but the examples imply the correct usage for broad listing vs filtered lookup.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jules_send_messageSend Message to Jules SessionA

Send a message to an active Jules session.

Use this to provide feedback, answer questions, or give additional instructions while Jules is working on a task.

Args:

  • sessionId (string, required): The session ID

  • prompt (string, required): The message to send

Returns: Confirmation that the message was sent.

Examples:

  • "Please also add integration tests"

  • "Use TypeScript instead of JavaScript"

  • Answer a clarifying question from Jules

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYesThe message to send to the session
sessionIdYesThe session ID to send the message to

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a write operation (readOnlyHint=false) and not idempotent or destructive. The description adds valuable context beyond annotations: it requires an active session, describes the return value ('Confirmation that the message was sent'), and gives concrete examples of appropriate messages. This helps the agent understand behavioral expectations without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: a one-line summary, a short 'Use this to' clarification, a simple Args list, a Returns line, and examples. Every section earns its place without unnecessary verbosity. The front-loaded purpose statement makes it easy for an agent to quickly identify the tool's function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (two string parameters, no output schema), and the description covers purpose, parameters, return value, and examples, making it sufficient for invocation. It does not detail error conditions, but the annotations and schema cover the core safety and type constraints. Given the low complexity, this level of completeness is appropriate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with both sessionId and prompt already described in the schema. The description repeats the parameter descriptions but adds value through concrete examples ('Please also add integration tests', 'Use TypeScript instead of JavaScript') that illustrate the kind of content to include in the prompt. These examples enhance understanding beyond the schema's simple field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a clear and specific verb-resource pair: 'Send a message to an active Jules session.' It clearly distinguishes this tool from siblings (create/get/delete/list sessions, approve plan) by focusing on the action of sending a message while a session is active. The elaboration about feedback, questions, and instructions further clarifies its specific role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool: 'Use this to provide feedback, answer questions, or give additional instructions while Jules is working on a task.' This provides clear context and purpose, though it does not name alternative tools or explicitly state when not to use it. The sibling list implicitly offers alternatives, but that is outside the description itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 10 tool updatesv1.0.0
    • First observedjules_approve_plan
    • First observedjules_create_session
    • First observedjules_delete_session
    • First observedjules_get_activity
    • First observedjules_get_session
    • First observedjules_get_source
    • First observedjules_list_activities
    • First observedjules_list_sessions
    • First observedjules_list_sources
    • First observedjules_send_message

TDQS

A4.3/5.0

Scored across 10 tools

Disambiguation5/5

Each tool targets a distinct resource-action pair: sessions (create/get/list/delete/send/approve), activities (list/get), and sources (list/get). No two tools overlap in purpose, and descriptions clearly indicate which resource each operates on.

Naming Consistency5/5

All tool names follow the consistent jules_<verb>_<noun> pattern in snake_case, with verbs like get, list, create, delete, send, and approve. This makes the API highly predictable and easy to navigate.

Tool Count5/5

With 10 tools, the server is well-scoped for its purpose of managing AI coding sessions. Each tool has a clear, non-redundant role, covering session lifecycle, activity monitoring, and source context without unnecessary bloat.

Completeness4/5

The session lifecycle is well covered: create, read, list, delete, message, and plan approval. Activity and source listing/retrieval support monitoring and context. The only notable gap is a dedicated cancel/stop session tool, though sending a message could serve that purpose.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • -
    license
    A
    quality
    Not graded
    maintenance
    Enables automation of Google Jules AI coding assistant through task creation, code review automation, repository management, and AI-powered development workflows. Supports multiple session modes including cloud deployment with persistent authentication.
    13
    -
  • A
    license
    Not graded
    quality
    F
    maintenance
    Connects AI coding assistants to the Jules API for autonomous coding sessions. Enables creating and managing coding sessions, GitHub integration, plan approval workflows, and real-time activity tracking directly from your IDE.
    10 npm
    6
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Enables LLM applications to interact with Google's Jules AI coding assistant to manage repositories, coding sessions, and pull requests. It allows users to programmatically create tasks, approve plans, and communicate with the assistant during active coding sessions.
    9
    -
  • A
    license
    B
    quality
    C
    maintenance
    Exposes Google Jules AI capabilities for automated coding tasks, including session management, code reviews, and unified diff handling. It enables users to create sessions, approve plans, and synchronize AI-generated code changes with GitHub repositories.
    26
    10 npm
    MIT