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

# Server Functions

> Reference for the functions the proto-tools MCP server exposes to an agent

The server exposes seven functions, plus `deploy_tool` when it runs against Modal, where you deploy
tools yourself. They are grouped below by what the agent is doing: checking the workspace,
discovering a tool, inspecting its contract, running it, and deploying one that is not available
yet.

Large outputs such as predicted structures and embeddings are written to disk and returned as
file paths rather than inline, so a result never floods the agent's context.

<Note>
  MCP calls these functions *tools*, and a client such as Claude Code lists them under that name.
  This page calls them functions so they stay distinct from the bioinformatics tools they operate
  on, which is the sense `tool_key` and `list_tools` already use.
</Note>

A `tool_key` that matches nothing is returned as a result rather than an error, carrying
`did_you_mean` suggestions and a reminder that keys take the form `<model>-<action>`, so an agent
can correct itself without the call failing.

## Workspace

The backend the server resolved, and how it is configured.

<div class="mcp-tool mcp-workspace" id="workspace_info">
  <div class="mcp-tool-head"><span class="mcp-tool-name">workspace\_info()</span><a href="https://github.com/evo-design/proto-tools/blob/main/proto_tools/mcp/server.py#L121" target="_blank" class="func-table-btn func-source-btn mcp-tool-source"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</a></div>

  <div class="mcp-tool-body">
    Reports which backend the server resolved. On Modal it also reports the workspace and environment
    calls go to, how many apps are deployed, and whether Modal credentials are present.

    Takes no parameters.
  </div>
</div>

## Discover

Finding a tool in the catalog.

<div class="mcp-tool mcp-discover" id="list_tools">
  <div class="mcp-tool-head"><span class="mcp-tool-name">list\_tools()</span><a href="https://github.com/evo-design/proto-tools/blob/main/proto_tools/mcp/server.py#L130" target="_blank" class="func-table-btn func-source-btn mcp-tool-source"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</a></div>

  <div class="mcp-tool-body">
    Lists the available tools. On Modal this defaults to the tools deployed in the workspace; on
    `local` every registered tool is available.

    <ParamField path="deployed_only" type="boolean" default="true">
      Restrict to tools actually deployed in this workspace. Pass `false` to see the full catalog,
      including tools that would have to be deployed first.
    </ParamField>
  </div>
</div>

<div class="mcp-tool mcp-discover" id="search_tools">
  <div class="mcp-tool-head"><span class="mcp-tool-name">search\_tools()</span><a href="https://github.com/evo-design/proto-tools/blob/main/proto_tools/mcp/server.py#L144" target="_blank" class="func-table-btn func-source-btn mcp-tool-source"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</a></div>

  <div class="mcp-tool-body">
    Finds tools by keyword, matching against the tool key and its description.

    <ParamField path="query" type="string" required>
      The keyword to match.
    </ParamField>

    <ParamField path="deployed_only" type="boolean" default="true">
      Restrict to deployed tools, as in `list_tools`.
    </ParamField>
  </div>
</div>

## Inspect

A tool's typed contract: its schemas, an example input, and its citation.

<div class="mcp-tool mcp-inspect" id="get_tool_schema">
  <div class="mcp-tool-head"><span class="mcp-tool-name">get\_tool\_schema()</span><a href="https://github.com/evo-design/proto-tools/blob/main/proto_tools/mcp/server.py#L155" target="_blank" class="func-table-btn func-source-btn mcp-tool-source"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</a></div>

  <div class="mcp-tool-body">
    Returns the input, config, and output schemas for a tool. Arguments are validated strictly against
    them, and unknown fields are rejected.

    <ParamField path="tool_key" type="string" required>
      The tool to describe.
    </ParamField>
  </div>
</div>

<div class="mcp-tool mcp-inspect" id="get_tool_example">
  <div class="mcp-tool-head"><span class="mcp-tool-name">get\_tool\_example()</span><a href="https://github.com/evo-design/proto-tools/blob/main/proto_tools/mcp/server.py#L164" target="_blank" class="func-table-btn func-source-btn mcp-tool-source"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</a></div>

  <div class="mcp-tool-body">
    Returns a known-good example input for a tool, or null when the tool declares none. Bulky values
    such as structure coordinates are elided, so the result shows the shape rather than a runnable
    payload.

    <ParamField path="tool_key" type="string" required>
      The tool to fetch an example for.
    </ParamField>
  </div>
</div>

<div class="mcp-tool mcp-inspect" id="get_tool_citation">
  <div class="mcp-tool-head"><span class="mcp-tool-name">get\_tool\_citation()</span><a href="https://github.com/evo-design/proto-tools/blob/main/proto_tools/mcp/server.py#L173" target="_blank" class="func-table-btn func-source-btn mcp-tool-source"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</a></div>

  <div class="mcp-tool-body">
    Returns the BibTeX citation and DOI for the method a tool implements.

    <ParamField path="tool_key" type="string" required>
      The tool to fetch a citation for.
    </ParamField>
  </div>
</div>

## Run

Executing a tool and returning its result.

<div class="mcp-tool mcp-run" id="run_tool">
  <div class="mcp-tool-head"><span class="mcp-tool-name">run\_tool()</span><a href="https://github.com/evo-design/proto-tools/blob/main/proto_tools/mcp/server.py#L181" target="_blank" class="func-table-btn func-source-btn mcp-tool-source"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</a></div>

  <div class="mcp-tool-body">
    Runs a tool and blocks until it finishes. Most tools return in seconds once warm; the first call
    after a few minutes idle pays a container start and a model load, and some tools, such as binder
    design and diffusion, run for many minutes.

    <ParamField path="tool_key" type="string" required>
      The tool to run.
    </ParamField>

    <ParamField path="inputs" type="object">
      The tool's input model. Validated strictly against its schema.
    </ParamField>

    <ParamField path="config" type="object">
      The tool's config model.
    </ParamField>

    <ParamField path="output_dir" type="string" default="./proto_tools_outputs">
      Directory large output fields are written into.
    </ParamField>

    <ParamField path="use_example" type="boolean" default="false">
      Run the tool's canonical example input without supplying it.
    </ParamField>

    <ParamField path="run_on" type="string">
      Override the server's backend for this call alone — `"local"`, `"modal"`, or `"proto"`.
      Omit it to use the backend the server was started with.
    </ParamField>
  </div>
</div>

## Deploy

Provisioning a tool on Modal. Not registered on the local backend, which has nothing to deploy.

<div class="mcp-tool mcp-deploy" id="deploy_tool">
  <div class="mcp-tool-head"><span class="mcp-tool-name">deploy\_tool()</span><a href="https://github.com/evo-design/proto-tools/blob/main/proto_tools/mcp/server.py#L231" target="_blank" class="func-table-btn func-source-btn mcp-tool-source"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</a></div>

  <div class="mcp-tool-body">
    Deploys the Modal app serving a tool. The deployment builds a container image and then executes
    the tool once, on a GPU where the tool requires one. Both are billed to your own Modal account,
    and both occur before any result is returned. The operation may take several minutes, and progress
    is reported as the build advances through its phases.

    <ParamField path="tool_key" type="string" required>
      The tool to deploy.
    </ParamField>

    <ParamField path="environment" type="string" required>
      The target Modal environment. Required rather than inherited, so an accidental deployment to
      production is not possible.
    </ParamField>
  </div>
</div>

<Warning>
  You are asked to confirm before anything is built. Declining deploys nothing and incurs no
  cost. A client that cannot present the prompt is treated as a refusal.
</Warning>

## Next Steps

<CardGroup cols={2}>
  <Card title="Installation" icon="download" href="/docs/mcp/installation">
    Install the extra, register the server, and select a backend.
  </Card>

  <Card title="Modal Integration" icon="cloud" href="/docs/mcp/modal">
    How the server uses Modal, and the confirmation step behind `deploy_tool`.
  </Card>

  <Card title="Tools" icon="boxes" href="/docs/tools/introduction">
    The catalog these tools operate over, with per-tool reference pages.
  </Card>

  <Card title="Quickstart" icon="rocket" href="/docs/tools/guides/quickstart">
    The same Input plus Config to Output contract, from Python.
  </Card>
</CardGroup>
