MCP servers¶
MCP servers give the agent tools hosted outside the project. Declare each server in YAML, choose which of its tools the agent may call, and keep the connection settings under version control like any other resource.
Location¶
Servers are listed under the mcp_servers key. The file is optional; omit it if the agent uses no MCP servers.
What an MCP server contains¶
Each entry is one server the agent connects to: where it is, how to authenticate, and which of its tools the agent may call.
Fields¶
| Field | Required | Description |
|---|---|---|
provider_id |
Yes | Identifies the server. For a provider from the Agent Studio catalogue, use its id (e.g. tavily); for any other server, use any short key (e.g. deepwiki). |
url |
Yes | The server's http(s):// URL. |
auth |
No | How to authenticate. See Authentication. |
timeout |
No | Request timeout in seconds, from 1 to 30. |
enabled_functions |
No | Tool names the agent may call. Leave the key out to enable every tool the server offers; [] enables none. |
Changing provider_id replaces the server
Servers added in Agent Studio as custom servers show up with a provider_id like custom:1791899588123. Keep that value: a different provider_id is pushed as a new server, and the old one is deleted.
Authentication¶
auth uses one of three methods:
| Method | Fields |
|---|---|
| Header | header (the header name) and secret_name |
| Query parameter | query_param (the parameter name) and secret_name |
| OAuth client credentials | oauth, with client_id, client_secret_name and token_url, and optionally audience and scope |
secret_name and client_secret_name are the names of secrets stored in Agent Studio. The secret values are never pulled to or pushed from your machine. A secret is sent as the whole header or parameter value, so for a bearer token store Bearer <token> as the secret.
Example¶
mcp_servers:
- provider_id: ticketing
url: https://mcp.ticketing.example.com/v1
auth:
header: Authorization
secret_name: ticketing_mcp_token
timeout: 15
enabled_functions:
- search_tickets
- create_ticket
- provider_id: internal-tools
url: https://internal.example.com/mcp
auth:
oauth:
client_id: my-client
client_secret_name: internal_mcp_oauth_secret
token_url: https://internal.example.com/oauth/token
scope: tools:read
# Added in Agent Studio as a custom server; keep its provider_id as pulled
- provider_id: custom:1791899588123
url: https://tools.example.com/mcp
auth:
query_param: api_key
secret_name: tools_api_key
Tool discovery state stays on the platform
Agent Studio records when it last listed a server's tools and how many it found. That state isn't written to mcp.yaml, and pushing a change to a server keeps it as it is.
Saved profiles aren't synced
Agent Studio keeps a saved profile for a disconnected provider so it can be reconnected. Profiles hold the same settings as a server, so the ADK doesn't sync them. Disconnecting a server in Agent Studio removes it from mcp_servers on the next pull.
Validation¶
provider_idandurlare required, andurlmust be anhttp(s)://URL.provider_idmust be unique withinmcp_servers.authsets only one ofheader,query_paramandoauth.headerandquery_paramneedsecret_name, andsecret_nameneeds one of them.oauthneedsclient_id,client_secret_nameandtoken_url, andtoken_urlmust be anhttp(s)://URL.timeout, if set, is between 1 and 30.enabled_functionsentries must be non-empty and unique.
Best practices¶
- list the tools the agent needs in
enabled_functionsrather than enabling everything, so a server adding a tool doesn't change what the agent can do - keep credentials in Agent Studio secrets and refer to them by name; never put a token in the URL
Related pages¶
-
API integrations
Define plain HTTP APIs the agent calls from functions and flows. Open API integrations
-
Functions
Write Python tools when an operation needs custom logic. Open functions