addrbookFor publishers
← The evidence ledger

Evidence row 293674

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint fe6a2768-fa81-465a-a305-1c68139a1b58
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
e950666d7f4b322239b00fa0cae3a004dc34c1608083340773bd850659fd1904
Leaf
0x91c59ef8b1586404e6c275758c8aaa31364e7ff1d3164daef0ce5c3cbee5751b

What was observed

{
  "count": 13,
  "tools": [
    {
      "description": "Report the user's current plan and usage: their tier (Free or Premium), how many projects and how much storage they are using against their limits, their subscription status if any, and where they manage their plan. Use this when the user asks what plan they are on, how much storage or how many projects they have used, or whether they are near a limit. Metadata only - no files, facts, or profile content. This is READ-ONLY: you cannot change the plan or start a purchase; plan and billing changes are done by the user themselves at usemycontext.ai. Read-only; nothing is written, so it is safe to call.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "type": "object"
      },
      "name": "account"
    },
    {
      "description": "Search the user's connected documents by MEANING and return the most relevant passages (the actual text), each cited with its source file, for you to read and quote. Use this to ANSWER a question from the user's documents - it returns grounded source content, not a file link, not a filename list, and not a pre-written answer (you do the reasoning). Before telling the user you do not know something about them or their work, search here first - the answer is often in their documents. Read-only; nothing is written, so it is safe to call.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "handle": {
            "description": "Optional: name one of the user's OWN profiles by its public @handle (with or without the leading @), as listed by list_profiles - an alternative to projectId, and it takes precedence if both are given. Honored only for an account-wide connection; a single-project connection is already scoped and ignores it. A handle that is not one of the user's own profiles is refused outright, never quietly swapped for another profile. To read context someone ELSE shared with the user or published, use shared_context instead.",
            "type": "string"
          },
          "k": {
            "description": "How many passages to return (default 12, max 50).",
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "projectId": {
            "description": "Optional: which of the user's projects to search - a projectId from list_profiles. Honored only for an account-wide connection; a single-project connection is already scoped and ignores this.",
            "type": "string"
          },
          "query": {
            "description": "What to find in the user's documents (a question or topic).",
            "type": "string"
          }
        },
        "required": [
          "query"
        ],
        "type": "object"
      },
      "name": "ask_docs"
    },
    {
      "description": "Fetch one document's full extracted text by id (a file id from search / search_files / list_files), in the deep-research result shape. ALIAS: this is the SAME read as get_file (same data, same permissions, same audit, same size guard - large files are truncated) - use it when your client requires the id/title/text/url fetch contract (ChatGPT deep research); otherwise prefer get_file, which also serves download links and inline images. Read-only; audited.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "handle": {
            "description": "Optional: name one of the user's OWN profiles by its public @handle (with or without the leading @), as listed by list_profiles - an alternative to projectId, and it takes precedence if both are given. Honored only for an account-wide connection; a single-project connection is already scoped and ignores it. A handle that is not one of the user's own profiles is refused outright, never quietly swapped for another profile. To read context someone ELSE shared with the user or published, use shared_context instead.",
            "type": "string"
          },
          "id": {
            "description": "The document id - a file id from search, search_files, or list_files.",
            "type": "string"
          },
          "projectId": {
            "description": "Optional: which of the user's projects holds the file. Honored only for an account-wide connection; a single-project connection is already scoped and ignores this.",
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "type": "object"
      },
      "name": "fetch"
    },
    {
      "description": "Get the full text content of one file by id (large files are truncated; use ask_docs for targeted passages). An image returns the picture itself (plus any text read from it at upload); other binary files return a short-lived download link instead. Audited.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "fileId": {
            "description": "The id of the file to fetch.",
            "type": "string"
          },
          "handle": {
            "description": "Optional: name one of the user's OWN profiles by its public @handle (with or without the leading @), as listed by list_profiles - an alternative to projectId, and it takes precedence if both are given. Honored only for an account-wide connection; a single-project connection is already scoped and ignores it. A handle that is not one of the user's own profiles is refused outright, never quietly swapped for another profile. To read context someone ELSE shared with the user or published, use shared_context instead.",
            "type": "string"
          },
          "projectId": {
            "description": "Optional: which of the user's projects holds the file. Honored only for an account-wide connection; a single-project connection is already scoped and ignores this.",
            "type": "string"
          }
        },
        "required": [
          "fileId"
        ],
        "type": "object"
      },
      "name": "get_file"
    },
    {
      "description": "Explain what UseMyContext is, what this connection can and cannot do, and where the user goes to manage their account. Call this when the user asks what UseMyContext is, what you (the AI) can do with this connection, or where to find pricing, plans, billing, teams, or settings. IMPORTANT: this connection is READ-ONLY - you cannot create/rename/delete a profile, change privacy, manage the plan or billing, set up a team, invite teammates, or connect Google Drive/Notion/kDrive; those are done by the user at usemycontext.ai, so point them to the returned links rather than attempting them or telling them to search. Returns static public information only (no user data). Read-only; nothing is written, so it is safe to call.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "type": "object"
      },
      "name": "info"
    },
    {
      "description": "List the user's files (metadata only: id, name, size, content-type, modified, status). Each file's status shows its readiness: 'available' means get_file can read it right now, and a just-processed file can take up to about a minute more to become searchable via ask_docs (queueEtaSeconds, when present, estimates the remaining wait). Read-only; nothing is written, so it is safe to call.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "handle": {
            "description": "Optional: name one of the user's OWN profiles by its public @handle (with or without the leading @), as listed by list_profiles - an alternative to projectId, and it takes precedence if both are given. Honored only for an account-wide connection; a single-project connection is already scoped and ignores it. A handle that is not one of the user's own profiles is refused outright, never quietly swapped for another profile. To read context someone ELSE shared with the user or published, use shared_context instead.",
            "type": "string"
          },
          "projectId": {
            "description": "Optional: which of the user's projects to list files from - a projectId from list_profiles. Honored only for an account-wide connection; a single-project connection is already scoped and ignores this.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "list_files"
    },
    {
      "description": "List the user's own profiles (their projects). Returns metadata only for each profile: its projectId, its name, its public @handle, its privacy status (private, shared, network, public, or org), and whether it is the one THIS connection reads by default. Use it when the user asks how many profiles they have, what their profiles are called, or which profile you are connected to - and whenever another tool needs a projectId to target a specific profile, because each entry carries its projectId. Do NOT use it to read the user's context, to learn about them, or to set them up with UseMyContext - the profile tool does all three. No file content, no facts, no compiled context. Read-only; nothing is written, so it is safe to call.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "type": "object"
      },
      "name": "list_profiles"
    },
    {
      "description": "Return the user's compiled personal context - a compact structured summary of who they are, synthesized from their accepted facts. Call it at the start of any conversation that involves the user personally, to ground who they are. This is ALSO the tool that sets a user up with UseMyContext: call it when they say 'set me up with UseMyContext', 'get me started', 'get to know me', 'onboard me', or otherwise ask you to learn about them. On a brand-new or empty profile the reply carries the setup instructions to follow; on an established one it carries their context. Do not reach for list_profiles for any of that - it only lists each profile's name, @handle, and privacy status. No file content. Read-only; nothing is written, so it is safe to call. Also reports the profile's privacy status (private, shared, network, public, or org) so you can describe it correctly.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "handle": {
            "description": "Optional: name one of the user's OWN profiles by its public @handle (with or without the leading @), as listed by list_profiles - an alternative to projectId, and it takes precedence if both are given. Honored only for an account-wide connection; a single-project connection is already scoped and ignores it. A handle that is not one of the user's own profiles is refused outright, never quietly swapped for another profile. To read context someone ELSE shared with the user or published, use shared_context instead.",
            "type": "string"
          },
          "projectId": {
            "description": "Optional: which of the user's profiles (projects) to read - a projectId from list_profiles. Honored only for an account-wide connection; a single-project connection is already scoped and ignores this.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "profile"
    },
    {
      "description": "Run an EXACT, deterministic query over ONE tabular file (a CSV, or the first table of a spreadsheet/PDF/Word document). Use this instead of ask_docs whenever the question needs COUNTING, SUMMING, AVERAGING, MIN/MAX, FILTERING, or exact row lookups over structured data ('how many rows...', 'total amount by region', 'list orders where status is failed') - semantic search undercounts tables, while this executes over EVERY row and returns exact numbers. Use ask_docs for prose/meaning questions and get_file to read a whole document. The `query` argument is a JSON object: { select?: [column names to return as raw rows], where?: [{col, op, value}, ...] filters combined with AND - ops eq | neq | contains compare text case-insensitively, gt | gte | lt | lte compare numerically (rows whose cell is not a number are skipped and counted in skippedNonNumeric), groupBy?: 'column' gives one result row per distinct value, aggregates?: [{fn, col}] with fn count | sum | avg | min | max ('col' required except for count), limit?: max raw rows (default 50, max 200) }. Column names match the file's header row case-insensitively. Examples: {\"where\":[{\"col\":\"status\",\"op\":\"eq\",\"value\":\"failed\"}],\"aggregates\":[{\"fn\":\"count\"}]} counts failed rows; {\"groupBy\":\"region\",\"aggregates\":[{\"fn\":\"sum\",\"col\":\"amount\"}]} totals amount per region; {\"select\":[\"name\",\"email\"],\"where\":[{\"col\":\"country\",\"op\":\"eq\",\"value\":\"FR\"}]} returns the matching rows. If you name a column that does not exist, the error lists the file's real columns - retry with one of those. Read-only; nothing is written, so it is safe to call.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "fileId": {
            "description": "The id of the file to query (from list_files / search_files - the same id get_file takes).",
            "type": "string"
          },
          "handle": {
            "description": "Optional: name one of the user's OWN profiles by its public @handle (with or without the leading @), as listed by list_profiles - an alternative to projectId, and it takes precedence if both are given. Honored only for an account-wide connection; a single-project connection is already scoped and ignores it. A handle that is not one of the user's own profiles is refused outright, never quietly swapped for another profile. To read context someone ELSE shared with the user or published, use shared_context instead.",
            "type": "string"
          },
          "projectId": {
            "description": "Optional: which of the user's projects holds the file. Honored only for an account-wide connection; a single-project connection is already scoped and ignores this.",
            "type": "string"
          },
          "query": {
            "additionalProperties": false,
            "description": "The constrained query object (grammar in the tool description): select?, where?, groupBy?, aggregates?, limit?.",
            "properties": {
              "aggregates": {
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "col": {
                      "type": "string"
                    },
                    "fn": {
                      "enum": [
                        "count",
                        "sum",
                        "avg",
                        "min",
                        "max"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "fn"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "groupBy": {
                "type": "string"
              },
              "limit": {
                "maximum": 200,
                "minimum": 1,
                "type": "integer"
              },
              "select": {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "where": {
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "col": {
                      "type": "string"
                    },
                    "op": {
                      "enum": [
                        "eq",
                        "neq",
                        "contains",
                        "gt",
                        "gte",
                        "lt",
                        "lte"
                      ],
                      "type": "string"
                    },
                    "value": {
                      "type": [
                        "string",
                        "number"
                      ]
                    }
                  },
                  "required": [
                    "col",
                    "op",
                    "value"
                  ],
                  "type": "object"
                },
                "type": "array"
              }
            },
            "type": "object"
          }
        },
        "required": [
          "fileId",
          "query"
        ],
        "type": "object"
      },
      "name": "query_table"
    },
    {
      "description": "Search the user's files by filename and return matching documents in the deep-research result shape. ALIAS: this is the SAME search as search_files (same data, same permissions) - use it when your client requires the id/title/url search contract (ChatGPT deep research); otherwise prefer search_files for richer file metadata. Each result's id can be passed to fetch (or get_file) to read that document. Read-only; nothing is written, so it is safe to call.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "handle": {
            "description": "Optional: name one of the user's OWN profiles by its public @handle (with or without the leading @), as listed by list_profiles - an alternative to projectId, and it takes precedence if both are given. Honored only for an account-wide connection; a single-project connection is already scoped and ignores it. A handle that is not one of the user's own profiles is refused outright, never quietly swapped for another profile. To read context someone ELSE shared with the user or published, use shared_context instead.",
            "type": "string"
          },
          "projectId": {
            "description": "Optional: which of the user's projects to search - a projectId from list_profiles. Honored only for an account-wide connection; a single-project connection is already scoped and ignores this.",
            "type": "string"
          },
          "query": {
            "description": "Filename query to match.",
            "type": "string"
          }
        },
        "required": [
          "query"
        ],
        "type": "object"
      },
      "name": "search"
    },
    {
      "description": "Search the user's files by filename. Returns matching file metadata (including each file's processing status), ranked by name match. Read-only; nothing is written, so it is safe to call.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "handle": {
            "description": "Optional: name one of the user's OWN profiles by its public @handle (with or without the leading @), as listed by list_profiles - an alternative to projectId, and it takes precedence if both are given. Honored only for an account-wide connection; a single-project connection is already scoped and ignores it. A handle that is not one of the user's own profiles is refused outright, never quietly swapped for another profile. To read context someone ELSE shared with the user or published, use shared_context instead.",
            "type": "string"
          },
          "projectId": {
            "description": "Optional: which of the user's projects to search - a projectId from list_profiles. Honored only for an account-wide connection; a single-project connection is already scoped and ignores this.",
            "type": "string"
          },
          "query": {
            "description": "Filename query to match.",
            "type": "string"
          }
        },
        "required": [
          "query"
        ],
        "type": "object"
      },
      "name": "search_files"
    },
    {
      "description": "List and read curated personal context shared with you. With no arguments, lists who shared what (names + ids only, no content). With a `from` selector (a grantId from that list), returns that person's shared profile text. SAVED BY NAME: if the user has saved a context under a short name, pass `saved` (that exact name) to pull it - the service resolves the name to the real source (a share, a teammate, a @handle, or one of the user's own projects) and re-checks access live every time. If that access is gone (revoked, expired, left the team, or closed), it returns a calm \"no longer available\" note instead of an error. NETWORK: if you already know a member's project @handle, pass `handle` to pull the context they have opened to the UseMyContext network - their live composite, read-only. Each @handle addresses ONE specific project, so the handle alone identifies what to read. ORGANISATION: if you and another person are members of the same UseMyContext team/organisation on an active team plan, pass `org` (the organisation id) and `member` (that teammate's member id) to read their live composite - their curated context only, never their files or facts. Profiles whose owners set them to public visibility are browsable anonymously at https://usemycontext.ai/directory; for private, shared, network, or team contexts you must already know the saved name / handle / org + member ids. Read-only; nothing is written, so it is safe to call. You only ever see what was shared with you, saved by you, opened to the network, or a teammate's context within your own organisation.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "from": {
            "description": "The grantId of a share to READ (take it from the list this tool returns with no arguments). Omit to LIST the available shares.",
            "type": "string"
          },
          "handle": {
            "description": "NETWORK read: a UseMyContext project's public @handle (with or without the leading @) whose context you want to pull. Each @handle addresses ONE specific project, so the handle alone identifies what to read - there is no separate project argument. The owner must have opened that project to the network. Public-visibility profiles are listed with their handles at https://usemycontext.ai/directory; for anything else you must already know the handle.",
            "type": "string"
          },
          "member": {
            "description": "ORGANISATION read: the member id of the teammate whose live composite you want to read. Only used alongside `org`. You can read only a fellow member of an organisation you also belong to.",
            "type": "string"
          },
          "org": {
            "description": "ORGANISATION read: the id of an organisation you and the target are BOTH members of (on an active team plan). Use together with `member`. The service re-checks your shared membership and the team plan before serving anything.",
            "type": "string"
          },
          "orgProject": {
            "description": "ORGANISATION read: which of that teammate's projects to read (defaults to their primary project). Only used alongside `org` + `member`.",
            "type": "string"
          },
          "saved": {
            "description": "SAVED-BY-NAME read: the exact short name the user gave a saved context. The service resolves the name to its real source and re-validates access live; if the access is gone it returns a calm \"no longer available\" note. Use this when the user refers to a context by a name they chose.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "shared_context"
    },
    {
      "description": "Suggest an update to the user's saved context (something you learned about them). It is saved as a PENDING suggestion for the user to review and accept or ignore - it does NOT directly change their profile, and nothing is ever written to their files. When a conversation has surfaced something new and durable about the user and is wrapping up (the user says thanks, goodbye, or that's all, or the task completes), offer to save it here before the context is lost.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "handle": {
            "description": "Optional: name one of the user's OWN profiles by its public @handle (with or without the leading @), as listed by list_profiles - an alternative to projectId, and it takes precedence if both are given. Honored only for an account-wide connection; a single-project connection is already scoped and ignores it. A handle that is not one of the user's own profiles is refused outright, never quietly swapped for another profile. To read context someone ELSE shared with the user or published, use shared_context instead.",
            "type": "string"
          },
          "projectId": {
            "description": "Which of the user's profiles the suggestion belongs to - a projectId from list_profiles. Optional: on an account-wide connection, omitting it files the suggestion into the user's active profile (the result names it); pass a projectId to target a different profile. A single-project connection is already scoped and ignores this.",
            "type": "string"
          },
          "suggestion": {
            "description": "The proposed fact or update about the user, in one short sentence.",
            "type": "string"
          }
        },
        "required": [
          "suggestion"
        ],
        "type": "object"
      },
      "name": "suggest_update"
    }
  ]
}

What the leaf hashes

{"body":"e950666d7f4b322239b00fa0cae3a004dc34c1608083340773bd850659fd1904","id":293674,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793049559678391,"prev":null,"subject":"fe6a2768-fa81-465a-a305-1c68139a1b58","subject_kind":"endpoint"}

Proof

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

  1. 0x91c591a36c254e97c2162ebcb42d8b1e8d64f8ac62407541601d1da446cba9f7
  2. 0x17d5dd3eb78646ab7b9a6c03727942c925ee3dbdfb13878073df4a76ef51e2fb
  3. 0x31a4403eb92d3f86fc4849e0b3d9b1baa0c0502a963adfdc090759d7487e780d
  4. 0x2ed5262c6e1132499b28a4d6982e20e2b39b36f5eea70e4036fa136aaa9b76c7
  5. 0x25b63e54d6225fd4774fbab4b4f29c127e49841462057573fe2b904a2d8a0f04
  6. 0xe27f51d484bedc8887c8a0bd2558f57e6f096a78b631b3194e834dcf56681d88
  7. 0xba097c0d71780d248e192f46736fc3f075263f3e0ec1f03a0077e2825b3223b7
  8. 0x944d7be9f4e9af748e1eff655fc38b340df940464276c00053bd2f6a821ead36
  9. 0x5410fead19c2a3bcc8f28608fd9fca026fb27a547465281a2d82863cf0bd4f32
  10. 0x0d8c9849ad61f3608ed33ea96162e91265f1a635a7e3d125b440758921da7146
  11. 0x316efc275d57dcc035269c8eb6bada510779068882f33960d16f7f84af2b4432
  12. 0xe131b224ee3c295dfa790b458d9daa11e2a32e6131c280c6be7d92190c756a88
  13. 0x45c1d3062bbe98a6b1540c7e2ccf6516eedd6ef07fdfeb1ba77ee6272970447c
  14. 0xf0edabbb9ba0d643e5505d19d07637eb6f6aed0a1c7356af43ae7d84ae9ef0c5
  15. 0xf0bd63870f0bb378fa300bd33563050dcb7b3e02b44eb3ee550c1c534ec4b246
  16. 0x1ac20d30773e1f4f2f811540e9a99b5cca9177c9e2e029acc0d80cf3f1d11f0f
  17. 0xd21942ae3214eff88e08ab04884fd4b11958b51af9a0741b7668e2d07a2c56c9
  18. 0x9a9024edb5069d88a324facb310a5ce8e495214bbaa968f077bede437390194f
  19. 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
Day root
0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
Chained
0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
Published
On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae

How to check it · This row as JSON