{
  "markdown": "# vtimestamp-mcp\r\n\r\nMCP server for verifying and querying [vtimestamp](https://vtimestamp.com) proofs on the Verus blockchain.\r\n\r\nEnables AI agents (Claude Desktop, VS Code, etc.) to verify document timestamps and list all timestamps on a VerusID — directly from the blockchain.\r\n\r\n> **Looking for the write server?** See [vtimestamp-mcp-write](https://www.npmjs.com/package/vtimestamp-mcp-write) — needs a local daemon and a wallet with the identity's private key.\r\n\r\n## Installation\r\n\r\n### Claude Code\r\n\r\n```bash\r\nclaude mcp add --transport stdio --scope user vtimestamp-read -- npx vtimestamp-mcp@latest\r\n```\r\n\r\n### Claude Desktop\r\n\r\nAdd to your `claude_desktop_config.json`:\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"vtimestamp\": {\r\n      \"command\": \"npx\",\r\n      \"args\": [\"-y\", \"vtimestamp-mcp@latest\"]\r\n    }\r\n  }\r\n}\r\n```\r\n\r\nUsing yarn:\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"vtimestamp\": {\r\n      \"command\": \"yarn\",\r\n      \"args\": [\"dlx\", \"vtimestamp-mcp\"]\r\n    }\r\n  }\r\n}\r\n```\r\n\r\nUsing pnpm:\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"vtimestamp\": {\r\n      \"command\": \"pnpm\",\r\n      \"args\": [\"dlx\", \"vtimestamp-mcp\"]\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n### VS Code\r\n\r\nAdd to your VS Code MCP settings:\r\n\r\n```json\r\n{\r\n  \"mcp\": {\r\n    \"servers\": {\r\n      \"vtimestamp\": {\r\n        \"command\": \"npx\",\r\n        \"args\": [\"-y\", \"vtimestamp-mcp@latest\"]\r\n      }\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n## Tools\r\n\r\n### `vtimestamp_verify`\r\n\r\nVerify whether a file or text has been timestamped on a VerusID. Provide either a file path or text — the server computes the SHA-256 hash and checks it against the on-chain record.\r\n\r\n| Parameter | Type | Required | Description |\r\n|-----------|------|----------|-------------|\r\n| `identity` | string | Yes | VerusID name (e.g., `alice@`) |\r\n| `file_path` | string | One of | Path to a file to verify |\r\n| `text` | string | One of | Text string to verify |\r\n\r\nEither `file_path` or `text` must be provided (mutually exclusive).\r\n\r\n**Example prompts:**\r\n- \"Check if the file at /path/to/report.pdf has been timestamped on alice@\"\r\n- \"Verify this text was timestamped on bob@: I attest that invoice #4521 was approved\"\r\n\r\n### `vtimestamp_list`\r\n\r\nList all timestamps recorded on a VerusID.\r\n\r\n| Parameter | Type | Required | Description |\r\n|-----------|------|----------|-------------|\r\n| `identity` | string | Yes | VerusID name (e.g., `alice@`) |\r\n\r\n**Example:** \"What documents has alice@ timestamped?\"\r\n\r\n### `vtimestamp_info`\r\n\r\nGet information about the vtimestamp service.\r\n\r\nNo parameters.\r\n\r\n**Example:** \"What is vtimestamp?\"\r\n\r\n## How It Works\r\n\r\nBy default, the server queries a public Verus mainnet RPC endpoint. No wallet, no API keys, no authentication required.\r\n\r\n```\r\nAI Agent (Claude Desktop, VS Code, etc.)\r\n    │ stdio (JSON-RPC)\r\n    ▼\r\nvtimestamp-mcp (local)\r\n    │ HTTPS (JSON-RPC 1.0)\r\n    ▼\r\nPublic Verus Mainnet RPC (rpc.vrsc.syncproof.net, fallback api.verus.services)\r\n```\r\n\r\nYou can also point this server at your own daemon — useful for testnet (where no public RPC supports decryption), high-volume agents, custom chains, or anyone who'd rather not have their inspections hit a public RPC. See [Configuration](#configuration) below.\r\n\r\n## On-chain storage shape\r\n\r\nvtimestamps are stored under a VerusID's `contentmultimap` and read via `getidentityhistory` (one history entry per `updateidentity`). This server handles two on-chain shapes transparently:\r\n\r\n- **Public-encrypted (`flags: 13`, written by `vtimestamp-mcp-write@1.2.0+`)** — the daemon's `{data:{}}` envelope produces a single ciphertext DataDescriptor with `epk` and `ivk` published on-chain. Reading these requires `decryptdata` + the originating txid + `retrieve: true`. Because the IVK is on-chain (public-encrypted mode), anyone can decrypt — no key sharing.\r\n- **Legacy plaintext (`flags: 0`, written by `vtimestamp-mcp-write@1.1.x` and earlier)** — per-field DataDescriptors (sha256, title, description, filename, filesize) under labeled keys. Read directly without `decryptdata`.\r\n\r\nThe reader branches on each entry's flags. Mixed identities (legacy entries from older writes alongside new encrypted entries) are handled correctly — both surface in `vtimestamp_list` output.\r\n\r\n**For background, see** [How to Publish Encrypted Data on an Identity](https://github.com/vdappdev2/verus-pbaas-docs/blob/main/docs/how-to/data/publish-encrypted-data-on-identity.md).\r\n\r\n### Public RPC requirement\r\n\r\n`decryptdata` is a daemon RPC method that public Verus RPCs do not all whitelist. As of writing:\r\n\r\n| Endpoint | Chain | `decryptdata` | Notes |\r\n|---|---|---|---|\r\n| `https://rpc.vrsc.syncproof.net` | VRSC mainnet | ✅ enabled | This server's primary endpoint. |\r\n| `https://api.verus.services` | VRSC mainnet | ❌ disabled | Fallback only. Encrypted entries fail to decrypt here, but legacy plaintext reads still work. |\r\n| `https://api.verustest.net` | VRSCTEST | ❌ disabled | No public testnet RPC supports `decryptdata`. **Testnet encrypted reads require a local daemon.** |\r\n\r\nIf syncproof is unreachable and the call falls back to `api.verus.services`, encrypted entries will gracefully surface as un-decryptable rather than crashing.\r\n\r\n## Configuration\r\n\r\nFor default public-RPC use, **no configuration is needed**. To point the server at your own daemon (required for testnet, recommended for high-volume use), set environment variables.\r\n\r\n### Environment Variables\r\n\r\nAll optional. Setting any of these switches the server from public-RPC mode to local-daemon mode.\r\n\r\n| Variable | Description |\r\n|----------|-------------|\r\n| `VERUS_RPC_URL` | Daemon RPC URL (e.g., `http://127.0.0.1:27486` for mainnet, `http://127.0.0.1:18843` for testnet) |\r\n| `VERUS_CONF_PATH` | Path to a `VRSC.conf` / `vrsctest.conf` file. Auto-derives URL (`http://127.0.0.1:<rpcport>`) and credentials. |\r\n| `VERUS_RPC_USER` | Override: RPC username |\r\n| `VERUS_RPC_PASSWORD` | Override: RPC password |\r\n\r\n**Behavior:**\r\n\r\n- *(no env vars)* → public RPC pair (`rpc.vrsc.syncproof.net` primary, `api.verus.services` fallback). Mainnet only.\r\n- `VERUS_RPC_URL` set → single local endpoint at that URL. Auth from `VERUS_RPC_USER` + `VERUS_RPC_PASSWORD`, or auto-derived from `VERUS_CONF_PATH` if those are missing.\r\n- `VERUS_CONF_PATH` set (without `VERUS_RPC_URL`) → URL = `http://127.0.0.1:<rpcport>` from the conf, with credentials from the conf.\r\n\r\n### Local daemon example (testnet)\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"vtimestamp\": {\r\n      \"command\": \"npx\",\r\n      \"args\": [\"-y\", \"vtimestamp-mcp@latest\"],\r\n      \"env\": {\r\n        \"VERUS_CONF_PATH\": \"/Users/you/Library/Application Support/Komodo/vrsctest/vrsctest.conf\"\r\n      }\r\n    }\r\n  }\r\n}\r\n```\r\n\r\nOr pin everything explicitly:\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"vtimestamp\": {\r\n      \"command\": \"npx\",\r\n      \"args\": [\"-y\", \"vtimestamp-mcp@latest\"],\r\n      \"env\": {\r\n        \"VERUS_RPC_URL\": \"http://127.0.0.1:18843\",\r\n        \"VERUS_RPC_USER\": \"rpc-user-from-conf\",\r\n        \"VERUS_RPC_PASSWORD\": \"rpc-password-from-conf\"\r\n      }\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n## Requirements\r\n\r\n- Node.js 18+\r\n- For default operation: nothing else — uses public mainnet RPC.\r\n- For testnet or local-daemon mode: a running `verusd` (or `verusd -chain=vrsctest`) on the host you point at.\r\n\r\n## License\r\n\r\nMIT\r\n",
  "bytes": 7241,
  "sha": "49ae0f6c8e609d452bdc1aa79a114ab67728411dbe14ee243bde975537baec9b",
  "repo_slug": "vdappdev2/vtimestamp-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_vdappdev2_vtimestamp_7f183363/readme"
}