> SpecStream is the live web data engine for teams and agents. This is the Markdown copy of https://specstream.ai/docs/integrations/ilter. Every page, with what SpecStream does and costs: https://specstream.ai/llms.txt

# ILTER

Register SpecStream in ILTER's MCP gateway, and ILTER adds live web search, page reading and Deep Search tools to the chat completion requests that pass through it, then runs the tool calls the model makes. ILTER starts SpecStream's stdio bridge as a subprocess.

[SpecStream for ILTERAgent frameworks & builders](https://specstream.ai/integrations/ilter.md)

## What you need

-   ILTER run from its release binary on a host with Python 3.12 or newer, with its admin key (`ILTER_ADMIN_API_KEY`).
-   A SpecStream account. New accounts start with $10 of credit, no card. [Create one](https://specstream.ai/signup?utm_source=ilter).

1.  1

    ## 1. Install the stdio bridge on the ILTER host

    ILTER reaches upstream MCP servers over stdio or SSE. SpecStream's server at `https://api.specstream.ai/mcp` speaks Streamable HTTP, so ILTER runs `specstream-mcp-stdio`, a small proxy with no dependencies that forwards each call to that address on your key. Install it where ILTER runs:

    ILTER host

    ```bash
    pip install specstream-mcp-stdio
    ```

2.  2

    ## 2. Put a SpecStream key in ILTER's environment

    In SpecStream, open [Agents & API](https://specstream.ai/workspace/agents?tab=keys&utm_source=ilter), choose **API keys**, then **Create API key**, and give it a total spending limit above 0. Every request through ILTER spends from this key, so its limit is the ceiling for all of them.

    ILTER starts a stdio server with its own environment, so set the key where ILTER starts and restart it:

    ILTER host

    ```bash
    export SPECSTREAM_API_KEY="YOUR_SPECSTREAM_API_KEY"
    ./ilter serve
    ```

3.  3

    ## 3. Register the server through the admin API

    Post the server to `/api/mcp-servers` on the dashboard port, 9191, with ILTER's admin key as a Bearer token. ILTER's configuration doc lists this section as `/api/mcp/servers`; the route the server answers, and the dashboard calls, is `/api/mcp-servers`.

    `transport` is `stdio` and `command` is `specstream-mcp-stdio`. ILTER looks the command up on its `PATH`, so give the full path, such as the output of `which specstream-mcp-stdio`, if it is not there. `args` and `env` are JSON written as strings. Send `"enabled": true`, or ILTER skips the server at its next start. `timeout_ms` defaults to 30,000; 60,000 gives a 20 page read room to finish:

    Terminal

    ```bash
    curl -X POST http://localhost:9191/api/mcp-servers \
      -H "Authorization: Bearer $ILTER_ADMIN_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "id": "specstream",
        "name": "SpecStream",
        "transport": "stdio",
        "command": "specstream-mcp-stdio",
        "args": "[]",
        "env": "{\"SPECSTREAM_MCP_URL\": \"https://api.specstream.ai/mcp\"}",
        "enabled": true,
        "timeout_ms": 60000
      }'
    ```

4.  4

    ## 4. Sync the tools

    Send `POST /api/mcp-servers/specstream/test` with the same admin key: ILTER starts the bridge and returns its `status` and `tools_count`. Then `POST /api/mcp-servers/specstream/sync`, or click **Sync** on SpecStream's row on the **MCP Servers** page, reads the tool list: `search_web`, `read_pages` and the Deep Search tools such as `compile` and `quote_capacity_work`. Keep the MCP toggle beside **Add Server** on that page on, or ILTER adds no MCP tools to requests.

5.  5

    ## 5. Send a request through ILTER

    Call ILTER's proxy on port 8181 as you do today. ILTER adds SpecStream's tools to the request, runs the `tool_call` the model returns, and gives the result back to the model, with no change in your client:

    Terminal

    ```bash
    curl -X POST http://localhost:8181/v1/chat/completions \
      -H "Authorization: Bearer <ilter-api-key>" \
      -H "Content-Type: application/json" \
      -d '{
        "model": "gpt-4o-mini",
        "messages": [{"role": "user", "content": "What is the latest stable release of PostgreSQL? Search the web."}]
      }'
    ```

## Or add it in the dashboard

Open the dashboard on port 9191 (`http://localhost:9191`), go to **MCP Servers** and click **Add Server**. Set **Server Name** to `SpecStream`, **Transport** to **STDIO (Subprocess)** and **Command** to `specstream-mcp-stdio`, and leave **Args** empty. Under **Environment Variables**, click **Add Variable** and set `SPECSTREAM_MCP_URL` to `https://api.specstream.ai/mcp`. Click **Add Server**.

The form saves the server with `enabled` off, and ILTER skips a disabled server when it next starts. Send `PATCH /api/mcp-servers/specstream/toggle` once with the admin key to turn it on; the reply's `enabled` should be `true`.

## Who gets the tools

ILTER's default MCP policy is `allow`, so every key gets every SpecStream tool unless a grant says otherwise, and a deny grant wins over an allow. To keep a key, user or group away from SpecStream, click **Access** on its row, and under **Add Grant** add a deny grant for that subject. A grant's tools can be `*` or a JSON list of tool names, so a deny grant on `["authorize_capacity_work"]` keeps a key to search and reading: Deep Search runs start only through that tool.

## What the model gets back

`search_web` takes `{"q": "<the question>"}` and returns an `answer` with the page it was read from, and the `sources` it read, each with `url`, `title`, `site` and `snippet`. `read_pages` takes `{"urls": ["<url>", ...]}`, up to 20, and returns each page's main text as Markdown. Deep Search tools quote a price first and start nothing until the approved maximum comes back in `confirm_max_cents`.

## With Docker

ILTER's official image is built on an empty `scratch` base with only the binary, CA certificates and time zones, so it has no Python for the bridge. Run the release binary on a host with Python 3.12, or build your own image that adds Python and `specstream-mcp-stdio`.

## Cost

Registering SpecStream in ILTER is free. Each `search_web` call is one Search API call at $5 per 1,000 searches of up to 10 results, and each page `read_pages` reads is $0.80 per 1,000 pages; a page with no text is not charged. Both come out of the balance with no quote and no approval, within the key's spending limit. Deep Search is priced per row, and nothing runs until its quote is approved. [Search API](https://specstream.ai/search-api.md), [Extract API](https://specstream.ai/extract-api.md) and [billing](https://specstream.ai/docs/billing.md).

## Remove

Delete SpecStream on ILTER's **MCP Servers** page, or send `DELETE /api/mcp-servers/specstream`. Revoke the key in SpecStream's **Agents & API** to end its access at once. Every tool on the server is described in the [agent guide](https://specstream.ai/docs/mcp.md). Questions go to [support@specstream.ai](mailto:support@specstream.ai).

## More

[SpecStream for ILTER](https://specstream.ai/integrations/ilter.md) covers what it does in ILTER on one page. Every other tool has its guide in [Connect your tools](https://specstream.ai/docs/integrations.md). You see the most a request can cost before it starts, and the matches are paid from your balance. [Billing](https://specstream.ai/docs/billing.md) has the details. For help, email [support@specstream.ai](mailto:support@specstream.ai).
