> ## Documentation Index
> Fetch the complete documentation index at: https://docs.stackone.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Call Actions

> Choose how to invoke StackOne actions: direct API, MCP, A2A, or SDKs

Once an account is linked, you can call its actions from your product. For the full journey up to that point — API key, connector profile, account linking — see the [Embed overview](/embed/getting-started).

<Info>
  **Actions** are the atomic operations in StackOne: `salesforce_list_contacts`, `gmail_send_message`, `google_drive_list_files`, etc. Every protocol is just a different way to invoke the same underlying actions.
</Info>

All protocols route through the **same engine** — authentication, rate limiting, data transformation, and error recovery are handled for every action. The choice comes down to your use case and how you're building.

## Protocols

<CardGroup cols={2}>
  <Card title="Agent SDK" icon="code" href="/embed/call-actions/agent-sdk">
    **Native TypeScript/Python** with framework integrations (LangChain, CrewAI, OpenAI)
  </Card>

  <Card title="MCP" icon="plug" href="/embed/call-actions/mcp">
    **Open standard** for AI tools. Works with Claude, Cursor, Vercel AI, n8n
  </Card>

  <Card title="A2A" icon="robot" href="/embed/call-actions/agent2agent">
    Call a pre-built agent per integration — for multi-agent orchestration.
  </Card>

  <Card title="RPC/HTTP" icon="terminal" href="/embed/call-actions/rpc-http">
    Call an action from any backend or script — no agent or framework.
  </Card>
</CardGroup>

## Which protocol?

|                   | [Agent SDK](/embed/call-actions/agent-sdk)                       | [MCP](/embed/call-actions/mcp)                         | [A2A](/embed/call-actions/agent2agent)                           | [RPC/HTTP](/embed/call-actions/rpc-http) |
| ----------------- | ---------------------------------------------------------------- | ------------------------------------------------------ | ---------------------------------------------------------------- | ---------------------------------------- |
| **Use case**      | AI agents with frameworks                                        | MCP-compatible clients                                 | Multi-agent systems                                              | Traditional apps, scripts                |
| **Best for**      | Programmatic control: load, filter, and select tools dynamically | Quick setup, IDE agents, switching accounts by header  | Agent orchestration, context isolation, long-running async tasks | Full control, non-agentic                |
| **Skip it when**  | You just want tools in an existing MCP client                    | You need programmatic control or custom error handling | You need synchronous responses in a single agent                 | You're building an AI agent              |
| **Requires code** | Yes                                                              | No (config only)                                       | Yes                                                              | Yes                                      |
| **Works with**    | Any AI framework (LangChain, CrewAI, Vercel AI SDK, …)           | Any MCP client (Claude, Cursor, Windsurf, n8n, …)      | Any A2A orchestrator                                             | Any HTTP client                          |

## Mixing protocols

Many production setups combine protocols — they all use the same actions and authentication, so you can mix and match:

* **RPC/HTTP for backend jobs** (scheduled syncs, data pipelines)
* **Agent SDK for your product** (customer-facing AI features)
* **MCP for internal tools** (Cursor, Claude Desktop for your team)
* **A2A for complex workflows** (multi-agent orchestration)

<Tip>
  Exposing hundreds of actions? Use [Tool Discovery](/features/tool-discovery) so the agent searches at runtime instead of overloading its context window — it works through both MCP (`search_execute` mode) and the SDK (tool search).
</Tip>
