@saihm/mcp-server-pro
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SAIHM_HOME | No | Base directory for self-join identity file. Defaults to ~/.saihm | |
| SAIHM_TIER | No | Tier label (e.g., 'FREE', 'PRO'). Required when self-onboarding. | |
| SAIHM_SELF_JOIN | No | Controls the saihm_join onboarding tool. On by default; set to '0' to suppress. | |
| SAIHM_ENDPOINT_URL | No | URL of the MCP endpoint. Defaults to https://saihm.coti.global/mcp | |
| SAIHM_PAYMENT_METHOD | No | Payment method for paid self-onboard (e.g., 'stripe'). Not used for FREE tier. | |
| SAIHM_SEQ_STATE_PATH | No | Path to persist sequence state. | |
| SAIHM_MASTER_SECRET_HEX | No | Master secret as a hex string (at least 64 hex chars). Provide this or SAIHM_MASTER_SECRET_FILE. | |
| SAIHM_MASTER_SECRET_FILE | No | Path to a mode-600 file containing the hex master secret. Takes precedence over SAIHM_MASTER_SECRET_HEX if both set. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| saihm_rememberA | Store information in SAIHM persistent memory. Encryption happens in this process and the key never leaves it, so the server holds ciphertext it cannot read. Use this when a fact, decision, or piece of context should outlive the current session. Pass an existing cellId to update that cell instead of adding a new one; when the endpoint reports that the update left shares of the cell on the previous version, they are re-issued for the new version and the result counts them, and a share that was not re-issued needs saihm_share again. Returns the cell id that saihm_forget takes. With warmStart "put", it instead stores an encrypted warm-start snapshot of the payload file named by token. |
| saihm_recallA | Retrieve your memories from SAIHM and decrypt them in this process; the server never sees plaintext. Use this at the start of a session, or whenever past context is needed. Pass query to filter by keyword, or leave it out to load everything. Pass cellId alone to read one of your own cells. To read a single cell another agent shared with you, pass their sharerPinnedAgentIdHashHex and sharerRecord together with the cellId; that path is read-only. Pass listOnly to list your cells' versions without their content. Pass sharesOnly to list every pointer shared with you, a page at a time, where the endpoint offers it. With warmStart "latest", it instead restores the newest encrypted warm-start snapshot into the payload file named by token; "list" lists them. |
| saihm_forgetA | Cryptographically erase one memory by its cell id (GDPR Art. 17). Destroying the wrapped key leaves the content unreadable to everyone, the operator included. Irreversible: use it when erasure is the intent, not to tidy a working set. With warmStart "delete", it instead destroys one encrypted warm-start snapshot, its key first. |
| saihm_statusA | Show the current SAIHM session: the agent identity, which this client derives locally, plus the tier, custody mode, shard and sharing counts, and bfsi score the server reports. No plaintext appears, because the server holds none. Use it to check which identity is active and what is stored and shared. |
| saihm_shareA | Grant one other agent access to a single memory cell, named by cellId. Identify the recipient by their recipientPinnedAgentIdHashHex, pinned out-of-band, and their recipientRecord. Set scope to 'read', 'write' or 'readwrite'. Only that one cell is exposed, and sharing re-wraps its key rather than copying the memory. |
| saihm_revoke_shareA | Withdraw a grant made with saihm_share, naming the same cellId and the recipient's recipientHex. It applies to future reads and cannot retract what the recipient has already read. Use it to end access; the memory itself remains, and saihm_forget is what erases. |
| saihm_governance_proposeA | Open a protocol governance proposal: set scope to 'emission_param' or 'protocol_upgrade', and for 'emission_param' also pass paramKey and proposedValue. Protocol governance is not enabled for this client yet — the tool is present so the surface stays stable, and calling it returns a 'governance unavailable' error rather than opening a vote. |
| saihm_governance_voteA | Cast a vote on an open protocol governance proposal by its proposalId, with approve set to true to approve or false to reject. Protocol governance is not enabled for this client yet — the tool is present so the surface stays stable, and calling it returns a 'governance unavailable' error rather than recording a vote. |
| saihm_joinA | Activate free SAIHM persistent memory for this agent. Call this when the user asks to join, sign up for, or set up SAIHM. Where no identity is configured, a join creates a NEW, EMPTY memory: first ask whether they already have a SAIHM identity (from another machine or an earlier session) - if so, do not join; they bring it with export-identity instead. In a hosted or cloud session that starts fresh each time, do not join there either: they join on a machine they keep, then bring that identity in the same way. Pass newIdentity: true once they confirm they want a new one here. It self-generates a sovereign memory key on this device and starts a one-time human approval — the tool returns a URL and short code for the user to open and enter. After the user approves, the join finishes by itself and the memory tools work; there is no need to call saihm_join again. No payment. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| saihm_session_bootstrap | Load your SAIHM persistent memory at the start of a session, before other work. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 9 tools
Core memory operations (remember/recall/forget) and access operations (share/revoke_share) have clearly distinct purposes with no real overlap. The main wrinkle is that remember, recall, and forget each overload a warmStart parameter for snapshot management, muddying their boundaries, and the two governance stubs are present but always error.
All tools share a predictable saihm_ prefix, which aids grouping. However, the convention is slightly mixed: most are simple verbs (remember, recall, forget, share, join) or verb_noun (revoke_share), while the governance tools flip to noun_verb (governance_propose, governance_vote).
Nine tools is well-scoped for a memory-plus-sharing-plus-governance domain, with each tool covering a distinct capability. Nothing feels redundant or padded aside from two intentionally inert governance stubs.
CRUD for memory cells (remember/recall/forget), sharing (share/revoke_share), status, and onboarding (join) are covered. But the join description references an 'export-identity' flow that has no corresponding tool, and the two governance tools are non-functional stubs, leaving notable gaps in the advertised surface.