# gateway_call

> Call a tool of a connected integration (such as GitHub) through MMW — parameters, response and errors.

On this page you will learn how the agent calls tools of integrations connected to your MMW project, and why the integration's secrets never reach the model.

The running example: the agent reads `docs/deploy.md` from the team repository through the `github_readonly` integration to compare it with the staging deploy fact.

## Purpose

`gateway_call` calls one tool of an external MCP integration that the user enabled for the project in their account. Integration tokens and keys are stored on the MMW server and are never passed to the model. Only integrations explicitly enabled for the key's project are reachable.

The same integration tools also appear in the tool list under their own names, for example `github_readonly.get_file_contents`. Calling them directly is equivalent to `gateway_call`.

## Parameters

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `server` | string | — (required) | Integration name, for example `github_readonly`. No dots. |
| `tool` | string | — (required) | Integration action name, for example `get_file_contents`. No dots. |
| `arguments` | object | — (required) | Action parameters, following the integration tool's schema. |
| `project_id` | string or null | `null` | Project to run the call in. Defaults to the key's project. |

## Response

The response is the integration tool's result as the integration returned it. For MCP integrations this is usually an object with a `content` field (a list of text blocks). MMW adds nothing to it.

## Example

```json title="arguments"
{
  "server": "github_readonly",
  "tool": "get_file_contents",
  "arguments": {
    "owner": "acme",
    "repo": "platform",
    "path": "docs/deploy.md",
    "ref": "main"
  }
}
```

```json
{
  "content": [
    {
      "type": "text",
      "text": "# Deploys\n\nstaging: systemd unit app-staging ..."
    }
  ]
}
```

The set of tools and their parameters is defined by the integration. For GitHub (read-only) these include `get_file_contents` (`owner`, `repo`, `path`, `ref`), `pull_request_read` (`owner`, `repo`, `pull_number`, `method`, `page`, `per_page`) and `get_me` with no parameters.

## Errors

| Text | Cause |
| --- | --- |
| `invalid gateway server or tool name` | Empty name or a dot in `server` or `tool`. Pass `github_readonly` and `get_file_contents` separately. |
| `gateway project not found` | The given `project_id` does not exist or is inactive. |
| `gateway tool not found` | No such tool among the project's enabled integrations, or the integration is disabled or failed its health check. |
| `required downstream secret is missing` | The integration's secret (token) is not configured in your account. |
| `downstream tool is not allowlisted` | The tool is not on the integration's allowed list. |
| `project call limit exceeded` | The project's per-minute call limit is used up. |
| `project gateway concurrency limit exceeded` | Too many concurrent integration calls in the project. |
| `downstream timeout` | The integration did not answer in time. |
| `downstream response size limit exceeded` | The integration's response exceeded the allowed size. |
| `downstream transport failure`, `downstream JSON-RPC error` | Failure on the integration side. |
| `[MMW Notice]: …` | No subscription or suspended account. |

## Notes

- Integrations are connected in your account, in the "MCP gateway" section. Without a connected integration, `gateway_call` has nothing to call and the list of integration tools is empty.
- For ChatGPT connections (beta), `gateway_call` and integration tools are not available: only the memory tools are.
- Integration calls are recorded in the project's audit log (without secrets).
- The `openWorldHint: true` annotation tells the client the tool reaches an external system, so it may ask for confirmation.

Integration calls count toward the same per-minute project call limit as memory calls, and there is also a cap on concurrent integration calls (see [Limits](/reference/limits/)).

## Next steps
