MODEL CONTEXT PROTOCOL

New to Siftree? Start with the connection guide.

Siftree over MCP

Siftree speaks the Model Context Protocol over streamable HTTP. Point any MCP-compatible client or agent framework at a single endpoint and it can search unstructured documents, aggregate them, define datasets, author and run tasks, and orchestrate multi-step workflows—scoped to the permissions of the account that authorized the connection.

https://app.siftree.com/api/mcp
27

tools across 8 areas, as of October 2026

Channels2
Documents4
Sources & datasets3
Tasks8
Workflows3
Reports1
Skills2
Web4

CONNECT

One endpoint. Any client.

Transport
Streamable HTTP
Protocol
JSON-RPC 2.0
Auth
OAuth, handled by the client
Scope
Channels the authorizing account can reach
VS CodeCursorCommand lineStdio-only clientsTypeScriptPythonRaw HTTP

Most desktop and IDE clients read a JSON file in this shape. Check your client's docs for where the file lives.

mcp.json
{
  "mcpServers": {
    "siftree": {
      "url": "https://app.siftree.com/api/mcp"
    }
  }
}

TOOLS

Everything your agent needs.

Channels

Workspace discovery

list_channels()

List every channel the authenticated account can reach.

get_channel(params.channel_id)

Read one channel’s metadata.

Documents

Search, count, aggregate

search_documents(params.channel_id, query.limit, …+6)

Search or list documents in a channel.

count_documents(params.channel_id, …+3)

Count documents matching a filter, without returning them.

aggregate_documents(params.channel_id, query.metrics, …+6)

Group documents by one or more fields and return counts.

aggregate_documents_time_series(params.channel_id, query.metrics, query.range, …+5)

Bucket document counts over a time range, optionally grouped.

Sources & datasets

Ingestion and schema

list_sources(query.channel_id)

List the connected integrations and upload origins feeding a channel.

list_datasets(params.channel_id)

List datasets and their schemas in a channel.

create_dataset(params.channel_id, body.name, body.schema)

Create a dataset with a declared schema for later uploads.

Tasks

Authoring and execution

list_tasks(params.channel_id)

List tasks in a channel with their latest run status.

author_task(params.channel_id, body.task_id, body.contract, …+1)

Hand a complete contract to a background builder that writes, tests, saves, runs, and verifies one task. Pass a task_id to edit or repair an existing task.

get_authoring_session(params.channel_id, params.session_id)

Poll a build’s status and activity timeline until it succeeds, fails, or is canceled.

cancel_authoring_session(params.channel_id, params.session_id)

Stop a build, its sandbox, and any run it started.

run_task(params.channel_id, params.task_id)

Queue a run and get back a task_run_id.

cancel_task_run(params.channel_id, params.task_id, params.task_run_id, …+1)

Cancel a queued or running run. Work it already committed is not rolled back.

get_task_run_logs(params.channel_id, params.task_id, params.task_run_id)

Read stdout and stderr for one run.

delete_task(params.channel_id, params.task_id)

Soft-delete a task. Run history is kept.

Workflows

Multi-step plans

start_workflow(params.channel_id, body.goal_text, body.steps, …+1)

Start a durable plan of task builds and report generations, with dependencies between steps.

get_agent_workflow(params.channel_id, params.workflow_id)

Read a workflow’s status and the status of each step.

cancel_agent_workflow(params.channel_id, params.workflow_id)

Stop a workflow, its running builds, and its pending steps.

Reports

Saved output

list_reports(params.channel_id)

List the reports saved in a channel.

Skills

Packaged workflows

load_skill(params.name)

Load a registered skill’s instructions and resource list.

read_skill_resource(params.name, query.resource_path)

Read one resource listed by a loaded skill.

Web

External context and collection

web_search(query.query, …+1)

Find public pages and current external information.

web_fetch(body.url)

Read the text of a public URL you already know.

lookup_public_web_scrapers(query.domain | query.dataset_id)

Find public-web scrapers for a site, such as ecommerce, maps, or jobs boards, with their collection methods and input schemas.

probe_web_pages(body.urls)

Sample up to three public pages exactly as a site-collection task will see them, to design a dataset schema.

FILTER GRAMMAR

Composable by design.

Every document tool takes the same filter shape. A leaf is { field, op, value }; compose leaves with and and or, nested arbitrarily deep.

eq

equals

neq

does not equal

gt

greater than

gte

greater than or equal

lt

less than

lte

less than or equal

in

value is in list

not_in

value is not in list

array_contains

array field contains value

string_contains

substring match

exists

field is present

not_exists

field is absent

is_null

field is null

not_null

field is not null

nested filter
{
  "and": [
    { "field": "language", "op": "eq", "value": "en" },
    {
      "or": [
        { "field": "themes", "op": "array_contains", "value": "pricing" },
        { "field": "body", "op": "string_contains", "value": "too expensive" }
      ]
    },
    { "field": "deleted_at", "op": "is_null" }
  ]
}

Questions

Before you connect.

How do I connect Siftree to Claude, ChatGPT, or my own agent?

Add https://app.siftree.com/api/mcp as a remote MCP server in your client and sign in with OAuth. Access is limited to the channels your account can reach.

What can my agent do through Siftree MCP?

Search, count, and aggregate documents; list and create datasets; author, run, and repair tasks; start multi-step workflows; read saved reports; load skills; and search or fetch the public web.

Should I use MCP or the Siftree app?

It depends on where you work. Use MCP to ask questions and operate supported Siftree tools inside the AI tool you already use. Use the Siftree app to set up sources, review approvals, and read reports.