Packages
claude_code
0.36.3
0.36.5
0.36.4
0.36.3
0.36.2
0.36.1
0.36.0
0.35.0
0.34.0
0.33.1
0.32.2
0.32.0
0.31.0
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.0
0.23.0
0.22.0
0.21.0
0.20.0
0.19.0
0.18.0
0.17.0
0.16.0
0.15.0
0.14.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.0
0.8.1
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Claude Agent SDK for Elixir – Build AI agents with Claude Code
Current section
Files
Jump to
Current section
Files
lib/claude_code/mcp.ex
defmodule ClaudeCode.MCP do
@moduledoc """
Integration with the Model Context Protocol (MCP).
This module provides the MCP integration layer. Custom tools are defined
with `ClaudeCode.MCP.Server` and passed via `:mcp_servers`.
## Usage
Define tools with `ClaudeCode.MCP.Server` and pass them via `:mcp_servers`:
defmodule MyApp.Tools do
use ClaudeCode.MCP.Server, name: "my-tools"
tool :add do
description "Add two numbers"
field :x, :integer, required: true
field :y, :integer, required: true
def execute(%{x: x, y: y}), do: {:ok, "\#{x + y}"}
end
end
{:ok, result} = ClaudeCode.query("What is 5 + 3?",
mcp_servers: %{"my-tools" => MyApp.Tools},
allowed_tools: ["mcp__my-tools__add"]
)
See the [Custom Tools](docs/guides/custom-tools.md) guide for details.
"""
alias ClaudeCode.MCP.Backend
alias ClaudeCode.MCP.Server
@doc """
Determines which backend handles the given MCP module.
Returns:
- `:sdk` — in-process SDK server (handled via Router, no subprocess)
- `{:subprocess, backend_module}` — subprocess server, with the backend that can expand it
- `:unknown` — unrecognized module
"""
@spec backend_for(module()) :: :sdk | {:subprocess, module()} | :unknown
def backend_for(module) when is_atom(module) do
cond do
Server.sdk_server?(module) -> :sdk
backend_compatible?(Backend.Anubis, module) -> {:subprocess, Backend.Anubis}
true -> :unknown
end
end
defp backend_compatible?(backend, module) do
Code.ensure_loaded?(backend) and backend.compatible?(module)
end
end