---
title: "How do playbooks connect to external systems?"
description: "TL;DR: Playbooks reach the outside world three ways: connect an external MCP server and call its tools, make direct HTTP calls (or define reusable custom HTTP tools), and use SDKs inside Code steps. Credentials are always supplied from Secrets — never hardcoded — and referenced with ${VAR} in headers and steps."
canonical_url: "https://docs.ballet.dev/articles/how-do-playbooks-connect-to-external-systems-Jije3yYddT"
md_url: "https://docs.ballet.dev/articles/how-do-playbooks-connect-to-external-systems-Jije3yYddT.md"
---
# How do playbooks connect to external systems?

**TL;DR:** Playbooks reach the outside world three ways: connect an external MCP server and call its tools, make direct HTTP calls (or define reusable custom HTTP tools), and use SDKs inside Code steps. Credentials are always supplied from Secrets — never hardcoded — and referenced with `${VAR}` in headers and steps.

## Who this is for

Developers wiring playbooks to APIs, SaaS tools, databases, and SDKs.

## What are my options?

| Approach | Use it for | Doc |
|---|---|---|
| **MCP connectors** | Services with an MCP server (Slack, Linear, GitHub, Stripe, …) | [Connect external MCP servers](/articles/how-do-i-connect-external-mcp-servers-to-playbooks-5Nd68jcOxW) |
| **HTTP and custom tools** | Any REST/HTTP API, including ones you wrap as reusable tools | [HTTP and custom tools](/articles/how-do-i-call-external-apis-and-sdks-from-a-playbook-zX7zFTnqwC) |
| **SDKs in Code steps** | Calling an SDK (including AI SDKs) from code | [HTTP and custom tools](/articles/how-do-i-call-external-apis-and-sdks-from-a-playbook-zX7zFTnqwC) |

All of these read credentials from [Secrets](/articles/how-do-i-use-secrets-and-env-vars-in-steps-7AeJ7El3L1).

## How do I choose?

- If the service publishes an MCP server, connect it — you get typed tools with OAuth or API-key auth and no glue code.
- If it's a plain REST API, use an HTTP step, and promote it to a custom tool when several playbooks need it.
- If you need data transforms, batching, or an SDK, do it in a Code step.

## Related articles

- [How do I connect an MCP server?](/articles/how-do-i-connect-an-mcp-server-RtBQhNBIoy)
- [What is a connector and how do I browse the registry?](/articles/what-is-a-connector-and-how-do-i-browse-the-registry-6PxIdsLTWe)
- [How do I edit steps (Code and HTTP)?](/articles/how-do-i-edit-steps-code-and-http-47pGJ6HgKr)
- [How do I store credentials with Secrets?](/articles/how-do-i-store-credentials-with-secrets-1D8OUcCo0n)
