Skip to content
MCP · Advanced

Docs contents

Business and custom data

Connect a reviewed MCP read operation

Discover a compatible MCP server, approve one fixed read and map its JSON result to dashboard values.

You’ll have

A room temperature of 21.5 °C and a battery bar at 76%, read by a read_environment tool every five minutes.

You’ll need
  • A trusted public HTTPS Streamable HTTP MCP server, with no authentication or a bearer token you can supply.
  • The server’s hostname allowed in DENFRAME_CUSTOM_BLOCK_HOSTS on the Denframe host (see Allow the API host).
  • A supported 2026-07-28 or 2025-11-25 server profile and an independently reviewed read-only operation. The example is a contract for a server you control, not a built-in Denframe tool.
  • Microsoft and Home Assistant MCP presets are not verified; use their own connection guides first. OAuth-only servers, stdio programs and generic LAN MCP endpoints are not supported by this connection.

Follow these steps in your own Denframe. This website never connects to your household, your accounts or your devices, and never asks for your credentials.

  1. Prepare a compatible read tool

    Denframe is an MCP client: it connects outbound to an MCP server you run and reads reviewed, read-only data. It is not an MCP server, and it offers no cloud or public API for agents to control a household; its own interfaces require the household's credentials and are reachable beyond the home network only through a route its owner sets up.

    Your server must advertise a read-only, non-destructive tool with bounded JSON schemas, like the tools/list entry below. Called with {"room":"living_room"}, it returns structuredContent containing {"temperature":21.5,"battery_pct":76}. Configure and secure the server with its own deployment instructions; Denframe doesn’t install it.

    Example tool metadata returned by your MCP server
    {
      "name": "read_environment",
      "inputSchema": {
        "type": "object",
        "properties": {
          "room": {
            "type": "string",
            "enum": [
              "living_room"
            ]
          }
        },
        "required": [
          "room"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "temperature": {
            "type": "number"
          },
          "battery_pct": {
            "type": "number",
            "minimum": 0,
            "maximum": 100
          }
        },
        "required": [
          "temperature",
          "battery_pct"
        ]
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false
      }
    }
  2. Discover operations

    In Studio, open Sources, then Custom. Choose Add a custom source; the sheet asks where the data comes from.

    Choose MCP server. Enter your actual endpoint in MCP endpoint (HTTPS), for example https://mcp.example.com/mcp, and its token in Bearer token (optional) if it needs one.

    Under Protocol profile, choose Current · 2026 for protocol 2026-07-28 or Compatibility · 2025 for 2025-11-25. Denframe doesn’t silently downgrade between profiles.

    Choose Discover operations. Discovery doesn’t call tools or read resource contents. Select read_environment in Saved operation.

  3. Review and run one test

    Enter the arguments below in Fixed JSON arguments. Check independently that the operation and account only read the intended data; the server’s annotations are claims, not proof.

    Fixed JSON arguments
    {"room":"living_room"}

    Tick I verified this operation and these arguments only read data, then choose Run test once. This authorizes one call with exactly those arguments.

  4. Map the result

    On Choose data, set up the first value and choose Add another value for the second:

    ValueField pathSettings
    Living room/temperatureMetric; °C; Hero number; expected 21.5
    Battery/battery_pctRange; %; 0 to 100; Bars; expected 76

    Keep Visibility on Household or Private as appropriate, then choose Preview selected values.

  5. Approve the schedule and add it

    On Preview, set Check every (seconds) to 300 and tick the box that approves running read_environment with the tested arguments every 300 seconds.

    Pick the value in Value to show, tick the dashboard under Show on, and choose Add source. Each refresh uses the saved arguments and rechecks the operation’s contract.

    If the schema or read policy changes, or the server refuses the token, Denframe pauses the source and asks for review. Open it and choose Edit connection and data: re-enter the token if the server needs one, then discover, review, test and approve again. A successful review resumes an automatically paused source; a manually paused source stays paused.

  6. JSON resources and older text results

    A resource must advertise application/json and return one JSON text item for the exact selected URI. Use {} as its arguments; Denframe doesn’t follow returned links.

    For an older tool that returns one complete JSON text item, tick Accept one complete JSON text result for older tools before testing. Structured output is preferred.

    Schemas with references, regex or compositions are unavailable in this bounded implementation; use a simpler read wrapper. Sampling, prompts, user-input requests, multimodal results and control tools are not executed.

  7. Check it worked

    The dashboard shows Living room at 21.5 °C and Battery as a 76% bar, and the source’s card on the Custom page reads MCP · saved read operation.

If it doesn’t work

No eligible operation

Check readOnlyHint is true, destructiveHint is false, and the input and output schemas use the supported bounded subset. Don’t relabel a control tool as read-only.

Discovery fails

Check the actual protocol version, the allowed public host, the token and the direct endpoint. Redirects and compressed responses are rejected.

The operation requires interaction

Use an unattended read operation that needs no extra user input or OAuth discovery during a refresh.

The sample expires

Choose Run test once again. Setup samples last ten minutes; importing a dashboard doesn’t grant permission to run a tool.

Official references

Related guides