addrbookFor publishers
← The evidence ledger

Evidence row 1295025

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint a63aa3fb-cca0-4f44-a7ef-c6e142ddfa9e
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
26db036b7465ca050fe92661e6452e6ca2c1d30f3939acfb6cbd52e417763eb4
Leaf
0xbea6664fa08bb1c7fd5407b54b2391de8e50173313d0ec9a9090836f2b7028f3

What was observed

{
  "count": 15,
  "tools": [
    {
      "description": "Send a POST, PUT, PATCH or DELETE request to any viaSocket API endpoint for the user and return its response: every write (create, update, publish, delete). For GET requests use call_any_read_api_of_viasocket. Look the endpoint up with get_viasocket_api_docs first to get its URL, headers, query params and body, unless the skill or a dedicated tool on this server already gives them exactly. Load the quickstart-viasocket-developer-hub skill first: it explains which tool to use when. Pass the full url with path variables filled in, the headers the docs list, query params in `query` (not in the url) and the JSON body in `body`. For the auth header the docs name (Authorization, proxy_auth_token, x-api-key, ...), pass it with an empty value \"\": the signed-in user's token is filled in automatically. Never put a real or made-up token there; if the docs name no auth header, leave it out and the token is sent as Authorization. If the API needs the user to sign in, they're asked the first time. Only for the viaSocket endpoints documented on this server: it attaches the viaSocket sign-in, so never use it for Embarko (ship.embarko.ai) or any other service. Returns { status, ok, headers, data }: the HTTP status and the response body, including error details on failure.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "body": {
            "additionalProperties": {},
            "description": "JSON request body, as the endpoint's docs show it. Leave it out when the endpoint takes no body.",
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          },
          "headers": {
            "additionalProperties": {},
            "description": "Request headers as name/value pairs, as the docs list them. Give the auth header (Authorization, proxy_auth_token, x-api-key, ...) an empty value \"\" so the signed-in user's token is filled in; never put a token here yourself. Pass {} when the endpoint needs no headers. Example: {\"proxy_auth_token\": \"\", \"Content-Type\": \"application/json\"}",
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          },
          "method": {
            "description": "HTTP method from the endpoint's docs",
            "enum": [
              "POST",
              "PUT",
              "PATCH",
              "DELETE"
            ],
            "type": "string"
          },
          "query": {
            "additionalProperties": {},
            "description": "Query params as name/value pairs; an array sends the param once per item. Example: {\"type\": \"flow\", \"bringflows\": true}",
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          },
          "url": {
            "description": "Full endpoint URL with path variables replaced by real values, e.g. https://api.example.com/users/42. Put query params in `query`, not here.",
            "type": "string"
          }
        },
        "required": [
          "url",
          "headers",
          "method"
        ],
        "type": "object"
      },
      "name": "call_any_api_of_viasocket"
    },
    {
      "description": "Read from any viaSocket API endpoint with a GET request for the user and return its response. Use it once you know the exact endpoint: look it up with get_viasocket_api_docs first to get its URL, headers, query params and body, unless the skill or a dedicated tool on this server already gives them exactly. Load the quickstart-viasocket skill first: it explains which tool to use when. For POST, PUT, PATCH and DELETE use call_any_api_of_viasocket. Pass the full url with path variables filled in, the headers the docs list, and query params in `query` (not in the url). For the auth header the docs name (Authorization, proxy_auth_token, x-api-key, ...), pass it with an empty value \"\": the signed-in user's token is filled in automatically. Never put a real or made-up token there; if the docs name no auth header, leave it out and the token is sent as Authorization. If the API needs the user to sign in, they're asked the first time. Returns { status, ok, headers, data }: the HTTP status and the response body, including error details on failure.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "headers": {
            "additionalProperties": {},
            "description": "Request headers as name/value pairs, as the docs list them. Give the auth header (Authorization, proxy_auth_token, x-api-key, ...) an empty value \"\" so the signed-in user's token is filled in; never put a token here yourself. Pass {} when the endpoint needs no headers. Example: {\"proxy_auth_token\": \"\", \"Content-Type\": \"application/json\"}",
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          },
          "query": {
            "additionalProperties": {},
            "description": "Query params as name/value pairs; an array sends the param once per item. Example: {\"type\": \"flow\", \"bringflows\": true}",
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          },
          "url": {
            "description": "Full endpoint URL with path variables replaced by real values, e.g. https://api.example.com/users/42. Put query params in `query`, not here.",
            "type": "string"
          }
        },
        "required": [
          "url",
          "headers"
        ],
        "type": "object"
      },
      "name": "call_any_read_api_of_viasocket"
    },
    {
      "description": "Get the viaSocket organization (id and details) that the signed-in user's token belongs to. Read-only, no inputs. Call this first whenever you need the organization id (orgId) for other viaSocket Developer Hub calls such as List Plugins, Get Plugin or analytics, instead of asking the user for it.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {},
        "type": "object"
      },
      "name": "get_org_details_by_token"
    },
    {
      "description": "Get run counts, error counts and flow counts for every action and trigger version of a plugin (filter=getPluginDetails, identifier=<pluginId>, optional startTime and endTime dates).",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "endTime": {
            "description": "Optional end date. e.g. 2026-10-19",
            "type": "string"
          },
          "filter": {
            "description": "Required (access check). Use getPluginDetails. e.g. getPluginDetails",
            "type": "string"
          },
          "identifier": {
            "description": "Required. Plugin id",
            "type": "string"
          },
          "orgId": {
            "description": "Your viaSocket organization id",
            "type": "string"
          },
          "startTime": {
            "description": "Optional start date. e.g. 2026-10-01",
            "type": "string"
          }
        },
        "required": [
          "orgId"
        ],
        "type": "object"
      },
      "name": "get_plugin_analytics"
    },
    {
      "description": "Browse the viaSocket API docs, one level at a time. Call it without arguments to get the top level: the modules and pages with a short description and the endpoints they hold. Call it with `path` set to a module's or page's link (or path) to get what is inside it; each listing links the next level. Call it with `path` set to an endpoint's link ending in \".openapi.yml\" to get that endpoint as an OpenAPI file: method, url, headers, query params, path variables, a request body example and sample responses. Fetch only the level you need.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "path": {
            "description": "A link from a listing, exactly as given (e.g. \"https://docs.example.com/sms/llms.txt\" or \".../sms/send-sms.openapi.yml\"), or just the path (\"sms\", \"sms/send-sms.openapi.yml\"). Leave it out for the top level.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "get_viasocket_api_docs"
    },
    {
      "description": "Gets the viaSocket organization's embed signing secret (VIASOCKET_EMBED_SECRET) into the developer's .env encrypted, so you never see it. Use it in SDK setup. Get orgId with get_org_details_by_token first. Before calling, run `docstar-cli key request` in the project folder and pass its publicKey; then run the `save` command this tool returns, then its `emit` command (the developer can choose another .env file). Never ask for, print or repeat the secret.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "orgId": {
            "description": "The orgId the key is created for",
            "type": "string"
          },
          "publicKey": {
            "description": "The publicKey printed by `docstar-cli key request`, exactly as printed",
            "type": "string"
          }
        },
        "required": [
          "publicKey",
          "orgId"
        ],
        "type": "object"
      },
      "name": "get_viasocket_embed_secret"
    },
    {
      "description": "List all versions of an action or trigger (filter=getActionVersions, identifier=<actionId>), with code, inputs, authid, status and verification status. Use fields to keep the response small.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "fields": {
            "description": "Optional comma-separated columns, e.g. rowid,versionid,status,verificationstatus",
            "type": "string"
          },
          "filter": {
            "description": "Required. Must be getActionVersions. e.g. getActionVersions",
            "type": "string"
          },
          "identifier": {
            "description": "Required. Action id",
            "type": "string"
          },
          "orgId": {
            "description": "Your viaSocket organization id",
            "type": "string"
          }
        },
        "required": [
          "orgId"
        ],
        "type": "object"
      },
      "name": "list_action_versions"
    },
    {
      "description": "List a plugin's actions and triggers (filter=getAllActions, identifier=<pluginId>), or get one (filter=getActionDetails, identifier=<actionId>). Use it to find an actionId.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "fields": {
            "description": "Optional comma-separated columns, e.g. rowid,name,type,status",
            "type": "string"
          },
          "filter": {
            "description": "Required. getAllActions (by plugin) or getActionDetails (one action by rowid). e.g. getAllActions",
            "type": "string"
          },
          "identifier": {
            "description": "Required. Plugin id for getAllActions; action id for getActionDetails",
            "type": "string"
          },
          "orgId": {
            "description": "Your viaSocket organization id",
            "type": "string"
          }
        },
        "required": [
          "orgId"
        ],
        "type": "object"
      },
      "name": "list_actions_and_triggers"
    },
    {
      "description": "List a plugin's authentication versions (filter=getAuthDetails, identifier=<pluginId>) to find an authid. Responses include decrypted client secrets: never show them to the user.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "fields": {
            "description": "Optional comma-separated columns",
            "type": "string"
          },
          "filter": {
            "description": "Required. getAuthDetails (all of a plugin's auth versions) or updateAuthDetails (one auth version by rowid). e.g. getAuthDetails",
            "type": "string"
          },
          "identifier": {
            "description": "Required. Plugin id for getAuthDetails; auth version rowid for updateAuthDetails",
            "type": "string"
          },
          "orgId": {
            "description": "Your viaSocket organization id",
            "type": "string"
          }
        },
        "required": [
          "orgId"
        ],
        "type": "object"
      },
      "name": "list_auth_versions"
    },
    {
      "description": "List an organization's embed projects (type=embed) for viaSocket SDK setup. Each data.projects[].id is a project_id (VIASOCKET_PROJECT_ID). Reuse an existing embed: one embed serves a whole product. Only if there is none, create one with the Create Embed Project endpoint (via call_any_api) after the developer confirms.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "bringflows": {
            "description": "Optional. true also returns the flows of each project. e.g. false",
            "type": "string"
          },
          "orgId": {
            "description": "Organization id from Find Organizations or Get Org Details By Token",
            "type": "string"
          },
          "type": {
            "description": "Required. `embed` for SDK projects (`flow` and `default` are the workspace's own automation projects). e.g. embed",
            "type": "string"
          }
        },
        "required": [
          "orgId"
        ],
        "type": "object"
      },
      "name": "list_embed_projects"
    },
    {
      "description": "List every viaSocket Developer Hub plugin (app) the user's organization owns. Send filter=getAllPlugins and identifier equal to the orgId in the path. Start here to find a pluginId (rowid).",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "fields": {
            "description": "Optional comma-separated list of columns to return, e.g. rowid,name,status,iconurl",
            "type": "string"
          },
          "filter": {
            "description": "Required. Must be getAllPlugins. e.g. getAllPlugins",
            "type": "string"
          },
          "identifier": {
            "description": "Required. Your orgId (same as the path)",
            "type": "string"
          },
          "orgId": {
            "description": "Your viaSocket organization id",
            "type": "string"
          }
        },
        "required": [
          "orgId"
        ],
        "type": "object"
      },
      "name": "list_plugins"
    },
    {
      "description": "Quickstart for viaSocket: build and manage your viaSocket plugins (apps) in the Developer Hub (auth, actions, triggers, versions, reusable components, debugging), set up a product's viaSocket keys, give a product its own MCP server, and build automations (flows) for the user: find apps, connect accounts, create flows, set triggers and write steps. Routes plug work through the plug skills index, product integration and the product's MCP server through the viaSocket skill, and Embarko deploy through Embarko's quickstart. Load this before any viaSocket task. Call this to load the full instructions for this skill before doing the task.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {},
        "type": "object"
      },
      "name": "quickstart-viasocket-developer-hub"
    },
    {
      "description": "Report a problem to viaSocket while building with it: an error, a confusion, wrong docs or skills, a user correction, or a missing capability. Problems only, never success; no need to ask the user; a failed report never stops the task. Plugs: fix or extend the user's own plugs (the ones in list_plugins) yourself, and build a plug for an app that has none. A plug used in flows but not in list_plugins is viaSocket's: never edit it, report it here (refs.pluginId, refs.actionId; a missing action, trigger or field is kind missing_capability, with exactly what is needed and why). Body: source (sdk | http_api | plug | action | trigger | connection | skill | other), kind (error | confusion | missing_capability | wrong_instructions | user_correction) and feedback (what happened, in plain words), plus optional severity, stage, intent, attempted, expected, actual, error, refs, env and retries. Never include secrets, tokens or script_id. The org and user come from the sign-in.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "actual": {
            "description": "e.g. 500 INTERNAL",
            "type": "string"
          },
          "attempted": {
            "description": "e.g. Ran Send Message with channel and text from the document's sample",
            "type": "string"
          },
          "env": {
            "additionalProperties": {},
            "description": "e.g. {\"sdkVersion\":\"0.7.0\",\"framework\":\"nextjs\",\"language\":\"typescript\",\"client\":\"claude-code\"}",
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          },
          "error": {
            "additionalProperties": {},
            "description": "e.g. {\"status\":500,\"code\":\"INTERNAL\",\"message\":\"failed\"}",
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          },
          "expected": {
            "description": "e.g. Message posted",
            "type": "string"
          },
          "feedback": {
            "description": "e.g. Slack Send Message returns 500 on valid input; same call worked yesterday",
            "type": "string"
          },
          "intent": {
            "description": "e.g. Post to a Slack channel when an order is created",
            "type": "string"
          },
          "kind": {
            "description": "e.g. error",
            "type": "string"
          },
          "refs": {
            "additionalProperties": {},
            "description": "e.g. {\"app\":\"slack\",\"pluginId\":\"rowslack123\",\"actionId\":\"rowsendmsg01\",\"requestId\":\"req_abc\"}",
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          },
          "retries": {
            "description": "e.g. 2",
            "type": "number"
          },
          "severity": {
            "description": "e.g. degraded",
            "type": "string"
          },
          "source": {
            "description": "e.g. action",
            "type": "string"
          },
          "stage": {
            "description": "e.g. actions_and_events",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "report_feedback"
    },
    {
      "description": "Call once right after you publish something on the user's own plug (one in list_plugins): a new plug, or a new action, trigger, version or connection on it. viaSocket then reviews the published plug and may add missing actions or triggers. Body: pluginId (the plug rowid, required), published (new_plug | new_action | new_trigger | new_version | connection), plus optional app (the app's name), actionIds (rowids of the actions or triggers just published) and note (plain words, never secrets). No need to ask the user; a failed call never stops the task. The org and user come from the sign-in. Not for problems: use report_feedback for those.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "actionIds": {
            "description": "e.g. [\"rowaction1234\",\"rowtrigger567\"]",
            "items": {},
            "type": "array"
          },
          "app": {
            "description": "e.g. Tally",
            "type": "string"
          },
          "note": {
            "description": "e.g. Published privately with 4 actions and 1 trigger; OAuth 2.0 connection",
            "type": "string"
          },
          "pluginId": {
            "description": "e.g. rowtally12345",
            "type": "string"
          },
          "published": {
            "description": "e.g. new_plug",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "report_published"
    },
    {
      "description": "Search the viaSocket documentation with a natural-language question. Returns the most relevant passages with their page URLs.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "query": {
            "description": "What to look for, e.g. \"how do I send a WhatsApp template message\"",
            "type": "string"
          }
        },
        "required": [
          "query"
        ],
        "type": "object"
      },
      "name": "search_viasocket_docs"
    }
  ]
}

What the leaf hashes

{"body":"26db036b7465ca050fe92661e6452e6ca2c1d30f3939acfb6cbd52e417763eb4","id":1295025,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793400212796249,"prev":null,"subject":"a63aa3fb-cca0-4f44-a7ef-c6e142ddfa9e","subject_kind":"endpoint"}

Proof

Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (243099 rows).

  1. 0xbea6715dcf6de6001d783112099714389f0c0f04894f71c54a9f77c7f89e0750
  2. 0x9d815f5fb75f936264332a82554737acf3aebceed85794824876a780a1d63bc5
  3. 0x325f748fd206b9998d5d036ea8b67603481538dde7b2b93f5c7aac850d91843d
  4. 0x991a818a34611ad1459f4e1516ada794b4a3682f248dbcc7ab971deefe78ed39
  5. 0x0b00b23d9482c170586ed2fb790e28109c7cbfbb9d6ed3581bc75433a09b45cd
  6. 0x99432c6ba3cdaaed40166f15abea785def06b08b4919a0dd843cfae92f809d44
  7. 0x1456c3c5cce5566dbc07750d0273a2aa6067c40c6fbf448a826b2553b8483079
  8. 0x33b860c394b8bb94a7e4a180c66a331bb31f11a12369ccaf2c7a2712c23ca21d
  9. 0x80cadf2e6ef8b2d2edffbb3286f5f49311fb77c06edd138586c6b7e9d68e641e
  10. 0x924b86ffa584c7bce4fd168de7148e5fad5a18dadf9457d0b0c9a351dcccc105
  11. 0x1b97bb4a3f93820ebfa040820d4be329623bf9d2e9d81100489c75d0017a06ef
  12. 0x57fceab70f7ebf4cc21c64e8b15bd9836e9708ee682ca03cdf5f32afb6399a35
  13. 0x0fe1386407f8ba162c04ac3fa7c25f73252796af4cb5a8f2d8f2ec65dc450f79
  14. 0x342f35813d736e85ba1881bcb69ecc7b4b96d68e557b8417f1f4ec705ab16ab6
  15. 0x9fb4eebd924fd42d4eb61d55691812de0db9242fc9c0dabb65c4054447246797
  16. 0x0c59b8770d2782eb535aefbb9b2f6810bab4757f51b37e00f5147713a1de9481
  17. 0x61ef83255d34604cb052882568ca1d1386ac3cfb8284509715bc1734cff77831
  18. 0x0c43c73b62a5d49ee1444b5dc4195fc5b16b141d3f4458e2e9fbd5fd6ecb367d
Day root
0x0826c7ad6039e06a2360ca0a4a3a4fe7f2626c6dc19f71a37599386f78b39875
Chained
0x36b4c8a1063758f0b8765fa1bdf75fa92fb543cc183add3e261880ee2bd1f822
Published
On Arc Testnet, block 69923247: 0x8704744146c6967c8abc9e9a99de4db7283b29e840922ea83a69b6fe776e6861

How to check it · This row as JSON