HoldKit MCP
HoldKit provides idempotency keys, distributed locks, timers, and inboxes for AI agents communicating over the Model Context Protocol (MCP). It enables reliable agent interactions by managing state, preventing duplicate actions, and handling asynchronous messaging without requiring payment integrations.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://holdkit.peerfoundry.ai/mcpWhat you can do with it
- Create idempotency keys to prevent duplicate agent actions
- Manage distributed locks for resource synchronization
- Set and cancel timers for delayed agent tasks
- Send and receive messages via agent inboxes
Source and maintenance
Protocol and capabilities
- Server
- holdkit 0.1.0
- MCP protocol
- 2025-06-18
- Tools
- 14 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
}
}Tools
14 advertised
keys.create — Create caller key
Mint a pf_ caller key bound to one HoldKit namespace.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}{
"readOnlyHint": false,
"destructiveHint": false
}inbox.create — Create inbox
Create an inbox. Returns webhook and A2A URLs.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}{
"readOnlyHint": false,
"destructiveHint": false
}inbox.poll — Poll inbox
Read inbox events after a cursor.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"inbox_id"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"exclusiveMinimum": 0
},
"cursor": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"inbox_id": {
"type": "string"
}
}
}{
"readOnlyHint": true,
"destructiveHint": false
}inbox.ack — Ack inbox
Mark inbox events done.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"inbox_id",
"event_ids"
],
"properties": {
"inbox_id": {
"type": "string"
},
"event_ids": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 50
}
}
}{
"readOnlyHint": false,
"destructiveHint": true
}inbox.wait — Wait inbox
Poll an inbox. block_ms is accepted and capped at 0 in this MVP, so the call returns current events.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"inbox_id"
],
"properties": {
"cursor": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"block_ms": {
"type": "integer",
"maximum": 25000,
"minimum": 0
},
"inbox_id": {
"type": "string"
}
}
}{
"readOnlyHint": true,
"destructiveHint": false
}timer.set — Set timer
Schedule a durable timer. Delivery URLs must be public https.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"delay_s",
"payload"
],
"properties": {
"url": {
"type": "string"
},
"delay_s": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"payload": {
"type": "string"
},
"inbox_id": {
"type": "string"
}
}
}{
"readOnlyHint": false,
"destructiveHint": false
}timer.cancel — Cancel timer
Cancel a timer.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"timer_id"
],
"properties": {
"timer_id": {
"type": "string"
}
}
}{
"readOnlyHint": false,
"destructiveHint": true
}lock.acquire — Acquire lock
Take a lease lock. Returns a fencing token.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"ttl_s"
],
"properties": {
"name": {
"type": "string"
},
"owner": {
"type": "string"
},
"ttl_s": {
"type": "integer",
"maximum": 3600,
"exclusiveMinimum": 0
}
}
}{
"readOnlyHint": false,
"destructiveHint": false
}lock.release — Release lock
Release a lock with its fencing token.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"fencing"
],
"properties": {
"name": {
"type": "string"
},
"fencing": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
}
}{
"readOnlyHint": false,
"destructiveHint": true
}idem.begin — Begin idempotency
Start an idempotency key or return the prior outcome. fingerprint is a hex hash.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"key",
"scope",
"fingerprint"
],
"properties": {
"key": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"scope": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"ttl_s": {
"type": "integer",
"maximum": 86400,
"minimum": 1
},
"fingerprint": {
"type": "string",
"pattern": "^[a-f0-9]{32,128}$"
}
}
}{
"readOnlyHint": false,
"destructiveHint": false
}idem.commit — Commit idempotency
Store the outcome reference for an idempotency key. scope (max 64) and owner are optional. When owner is omitted, the caller key hash is sent.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"key",
"result_ref"
],
"properties": {
"key": {
"type": "string"
},
"owner": {
"type": "string"
},
"scope": {
"type": "string",
"maxLength": 64
},
"result_ref": {
"type": "string"
}
}
}{
"readOnlyHint": false,
"destructiveHint": false
}kv.get — Get value
Read a small value.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"key"
],
"properties": {
"key": {
"type": "string"
}
}
}{
"readOnlyHint": true,
"destructiveHint": false
}kv.set — Set value
Write a small value with a TTL. Emails and card numbers are rejected.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"key",
"value",
"ttl_s"
],
"properties": {
"key": {
"type": "string"
},
"ttl_s": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"value": {
"type": "string"
}
}
}{
"readOnlyHint": false,
"destructiveHint": false
}kv.delete — Delete value
Delete a value.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"key"
],
"properties": {
"key": {
"type": "string"
}
}
}{
"readOnlyHint": false,
"destructiveHint": true
}Prompts
Not advertised
Resources
Not advertised
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 294 ms
- 95th percentile latency
- 294 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 294 ms · metadata changed · 14 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http holdkit-mcp https://holdkit.peerfoundry.ai/mcpCodex
codex mcp add holdkit-mcp --url https://holdkit.peerfoundry.ai/mcpCursor
{
"mcpServers": {
"holdkit-mcp": {
"url": "https://holdkit.peerfoundry.ai/mcp"
}
}
}Cline
{
"mcpServers": {
"holdkit-mcp": {
"type": "streamableHttp",
"url": "https://holdkit.peerfoundry.ai/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"holdkit-mcp": {
"type": "http",
"url": "https://holdkit.peerfoundry.ai/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http holdkit-mcp https://holdkit.peerfoundry.ai/mcpClaude Desktop
{
"mcpServers": {
"holdkit-mcp": {
"url": "https://holdkit.peerfoundry.ai/mcp"
}
}
}Windsurf
{
"mcpServers": {
"holdkit-mcp": {
"serverUrl": "https://holdkit.peerfoundry.ai/mcp"
}
}
}Let your agent find its tools
Find servers like HoldKit MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other developer tools servers
Do you run HoldKit MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.