{
  "pack": "veyra-mcp-pack",
  "version": "0.2.0",
  "protocol": "mcp",
  "transport": "sse",
  "mcp_endpoint": "http://localhost:4200/sse",
  "discovery": {
    "health": "http://localhost:4200/health",
    "tools": "http://localhost:4200/tools",
    "well_known": "http://localhost:4200/.well-known/veyra-pack.json"
  },
  "counts": {
    "total": 48,
    "free": 24,
    "protected": 24,
    "session_tools": 2
  },
  "tool_families": [
    "workspace",
    "memory",
    "notes",
    "tasks",
    "snippets",
    "bookmarks",
    "contacts",
    "forms",
    "webhooks"
  ],
  "backed_families": [
    "notes",
    "tasks",
    "bookmarks"
  ],
  "db_configured": true,
  "tools": [
    {
      "name": "get_workspace",
      "description": "Return the current session's workspace_id. Workspaces isolate stored notes, tasks, and bookmarks per client. Free, no authentication needed. Session-scoped only — does not persist any stored record and does not require commit mode. Use this to read or configure which workspace this MCP session operates on.",
      "tool_family": "workspace",
      "mode": "open",
      "category": "read",
      "side_effect_class": "none",
      "usage_hint": "Session-local configuration — not a stored state change."
    },
    {
      "name": "set_workspace",
      "description": "Set the session's workspace_id for this MCP connection so you can restore an existing workspace on reconnect. Free, no authentication needed. Session-scoped only — does not persist any stored record and does not require commit mode. Use this to read or configure which workspace this MCP session operates on.",
      "tool_family": "workspace",
      "mode": "open",
      "category": "read",
      "side_effect_class": "none",
      "usage_hint": "Session-local configuration — not a stored state change."
    },
    {
      "name": "memory_get",
      "description": "Read a single value from the Veyra memory key-value store by key. Free, no authentication needed. Read-only, no side effects. Use this when you need to inspect or retrieve existing data before deciding whether to perform a write.",
      "tool_family": "memory",
      "mode": "open",
      "category": "read",
      "side_effect_class": "none",
      "install_hint": "npm install -g veyra-memory",
      "usage_hint": "Prefer reads before writes when you need current context."
    },
    {
      "name": "memory_list",
      "description": "List keys in the memory store, optionally filtered by a key prefix. Free, no authentication needed. Read-only, no side effects. Use this when you need to inspect or retrieve existing data before deciding whether to perform a write.",
      "tool_family": "memory",
      "mode": "open",
      "category": "read",
      "side_effect_class": "none",
      "install_hint": "npm install -g veyra-memory",
      "usage_hint": "Prefer reads before writes when you need current context."
    },
    {
      "name": "memory_search",
      "description": "Full-text search across memory keys, values, and tags. Free, no authentication needed. Read-only, no side effects. Use this when you need to inspect or retrieve existing data before deciding whether to perform a write.",
      "tool_family": "memory",
      "mode": "open",
      "category": "read",
      "side_effect_class": "none",
      "install_hint": "npm install -g veyra-memory",
      "usage_hint": "Prefer reads before writes when you need current context."
    },
    {
      "name": "list_notes",
      "description": "Browse existing notes, optionally filtered by tag. Free, no authentication needed. Read-only, no side effects. Use this when you need to inspect or retrieve existing data before deciding whether to perform a write.",
      "tool_family": "notes",
      "mode": "open",
      "category": "read",
      "side_effect_class": "none",
      "install_hint": "npm install -g veyra-notes",
      "usage_hint": "Prefer reads before writes when you need current context."
    },
    {
      "name": "get_note",
      "description": "Read one note's full title, content, and tags by ID. Free, no authentication needed. Read-only, no side effects. Use this when you need to inspect or retrieve existing data before deciding whether to perform a write.",
      "tool_family": "notes",
      "mode": "open",
      "category": "read",
      "side_effect_class": "none",
      "install_hint": "npm install -g veyra-notes",
      "usage_hint": "Prefer reads before writes when you need current context."
    },
    {
      "name": "search_notes",
      "description": "Full-text search over note titles, content, and tags. Free, no authentication needed. Read-only, no side effects. Use this when you need to inspect or retrieve existing data before deciding whether to perform a write.",
      "tool_family": "notes",
      "mode": "open",
      "category": "read",
      "side_effect_class": "none",
      "install_hint": "npm install -g veyra-notes",
      "usage_hint": "Prefer reads before writes when you need current context."
    },
    {
      "name": "list_tasks",
      "description": "Browse tasks, optionally filtered by status, project, or priority. Free, no authentication needed. Read-only, no side effects. Use this when you need to inspect or retrieve existing data before deciding whether to perform a write.",
      "tool_family": "tasks",
      "mode": "open",
      "category": "read",
      "side_effect_class": "none",
      "install_hint": "npm install -g veyra-tasks",
      "usage_hint": "Prefer reads before writes when you need current context."
    },
    {
      "name": "get_task",
      "description": "Read one task's fields (title, status, priority, due) by ID. Free, no authentication needed. Read-only, no side effects. Use this when you need to inspect or retrieve existing data before deciding whether to perform a write.",
      "tool_family": "tasks",
      "mode": "open",
      "category": "read",
      "side_effect_class": "none",
      "install_hint": "npm install -g veyra-tasks",
      "usage_hint": "Prefer reads before writes when you need current context."
    },
    {
      "name": "search_tasks",
      "description": "Full-text search over task titles, projects, and tags. Free, no authentication needed. Read-only, no side effects. Use this when you need to inspect or retrieve existing data before deciding whether to perform a write.",
      "tool_family": "tasks",
      "mode": "open",
      "category": "read",
      "side_effect_class": "none",
      "install_hint": "npm install -g veyra-tasks",
      "usage_hint": "Prefer reads before writes when you need current context."
    },
    {
      "name": "list_snippets",
      "description": "Browse code snippets, optionally filtered by language or tag. Free, no authentication needed. Read-only, no side effects. Use this when you need to inspect or retrieve existing data before deciding whether to perform a write.",
      "tool_family": "snippets",
      "mode": "open",
      "category": "read",
      "side_effect_class": "none",
      "install_hint": "npm install -g veyra-snippets",
      "usage_hint": "Prefer reads before writes when you need current context."
    },
    {
      "name": "get_snippet",
      "description": "Read one snippet's full code and metadata by ID. Free, no authentication needed. Read-only, no side effects. Use this when you need to inspect or retrieve existing data before deciding whether to perform a write.",
      "tool_family": "snippets",
      "mode": "open",
      "category": "read",
      "side_effect_class": "none",
      "install_hint": "npm install -g veyra-snippets",
      "usage_hint": "Prefer reads before writes when you need current context."
    },
    {
      "name": "search_snippets",
      "description": "Full-text search over snippet titles, code, and tags. Free, no authentication needed. Read-only, no side effects. Use this when you need to inspect or retrieve existing data before deciding whether to perform a write.",
      "tool_family": "snippets",
      "mode": "open",
      "category": "read",
      "side_effect_class": "none",
      "install_hint": "npm install -g veyra-snippets",
      "usage_hint": "Prefer reads before writes when you need current context."
    },
    {
      "name": "list_bookmarks",
      "description": "Browse saved bookmarks, optionally filtered by tag or category. Free, no authentication needed. Read-only, no side effects. Use this when you need to inspect or retrieve existing data before deciding whether to perform a write.",
      "tool_family": "bookmarks",
      "mode": "open",
      "category": "read",
      "side_effect_class": "none",
      "install_hint": "npm install -g veyra-bookmarks",
      "usage_hint": "Prefer reads before writes when you need current context."
    },
    {
      "name": "get_bookmark",
      "description": "Read one bookmark record by ID. Free, no authentication needed. Read-only, no side effects. Use this when you need to inspect or retrieve existing data before deciding whether to perform a write.",
      "tool_family": "bookmarks",
      "mode": "open",
      "category": "read",
      "side_effect_class": "none",
      "install_hint": "npm install -g veyra-bookmarks",
      "usage_hint": "Prefer reads before writes when you need current context."
    },
    {
      "name": "search_bookmarks",
      "description": "Full-text search over bookmark titles, URLs, and tags. Free, no authentication needed. Read-only, no side effects. Use this when you need to inspect or retrieve existing data before deciding whether to perform a write.",
      "tool_family": "bookmarks",
      "mode": "open",
      "category": "read",
      "side_effect_class": "none",
      "install_hint": "npm install -g veyra-bookmarks",
      "usage_hint": "Prefer reads before writes when you need current context."
    },
    {
      "name": "list_contacts",
      "description": "Browse contacts, optionally filtered by tag or company. Free, no authentication needed. Read-only, no side effects. Use this when you need to inspect or retrieve existing data before deciding whether to perform a write.",
      "tool_family": "contacts",
      "mode": "open",
      "category": "read",
      "side_effect_class": "none",
      "install_hint": "npm install -g veyra-contacts",
      "usage_hint": "Prefer reads before writes when you need current context."
    },
    {
      "name": "get_contact",
      "description": "Read one contact's full record by ID. Free, no authentication needed. Read-only, no side effects. Use this when you need to inspect or retrieve existing data before deciding whether to perform a write.",
      "tool_family": "contacts",
      "mode": "open",
      "category": "read",
      "side_effect_class": "none",
      "install_hint": "npm install -g veyra-contacts",
      "usage_hint": "Prefer reads before writes when you need current context."
    },
    {
      "name": "search_contacts",
      "description": "Full-text search over contact names, emails, and companies. Free, no authentication needed. Read-only, no side effects. Use this when you need to inspect or retrieve existing data before deciding whether to perform a write.",
      "tool_family": "contacts",
      "mode": "open",
      "category": "read",
      "side_effect_class": "none",
      "install_hint": "npm install -g veyra-contacts",
      "usage_hint": "Prefer reads before writes when you need current context."
    },
    {
      "name": "list_forms",
      "description": "Browse every defined form. Free, no authentication needed. Read-only, no side effects. Use this when you need to inspect or retrieve existing data before deciding whether to perform a write.",
      "tool_family": "forms",
      "mode": "open",
      "category": "read",
      "side_effect_class": "none",
      "install_hint": "npm install -g veyra-forms",
      "usage_hint": "Prefer reads before writes when you need current context."
    },
    {
      "name": "get_form",
      "description": "Read one form's definition including its fields by ID. Free, no authentication needed. Read-only, no side effects. Use this when you need to inspect or retrieve existing data before deciding whether to perform a write.",
      "tool_family": "forms",
      "mode": "open",
      "category": "read",
      "side_effect_class": "none",
      "install_hint": "npm install -g veyra-forms",
      "usage_hint": "Prefer reads before writes when you need current context."
    },
    {
      "name": "get_responses",
      "description": "Read submitted responses for a specific form. Free, no authentication needed. Read-only, no side effects. Use this when you need to inspect or retrieve existing data before deciding whether to perform a write.",
      "tool_family": "forms",
      "mode": "open",
      "category": "read",
      "side_effect_class": "none",
      "install_hint": "npm install -g veyra-forms",
      "usage_hint": "Prefer reads before writes when you need current context."
    },
    {
      "name": "list_webhooks",
      "description": "Browse registered outbound webhook endpoints. Free, no authentication needed. Read-only, no side effects. Use this when you need to inspect or retrieve existing data before deciding whether to perform a write.",
      "tool_family": "webhooks",
      "mode": "open",
      "category": "read",
      "side_effect_class": "none",
      "install_hint": "npm install -g veyra-webhooks",
      "usage_hint": "Prefer reads before writes when you need current context."
    },
    {
      "name": "get_webhook",
      "description": "Read one registered webhook definition by ID. Free, no authentication needed. Read-only, no side effects. Use this when you need to inspect or retrieve existing data before deciding whether to perform a write.",
      "tool_family": "webhooks",
      "mode": "open",
      "category": "read",
      "side_effect_class": "none",
      "install_hint": "npm install -g veyra-webhooks",
      "usage_hint": "Prefer reads before writes when you need current context."
    },
    {
      "name": "get_history",
      "description": "Read past delivery attempts for a webhook (status, timestamps, responses). Free, no authentication needed. Read-only, no side effects. Use this when you need to inspect or retrieve existing data before deciding whether to perform a write.",
      "tool_family": "webhooks",
      "mode": "open",
      "category": "read",
      "side_effect_class": "none",
      "install_hint": "npm install -g veyra-webhooks",
      "usage_hint": "Prefer reads before writes when you need current context."
    },
    {
      "name": "memory_set",
      "description": "Write or overwrite a value under a specific key in the memory store. State-changing write operation. Requires veyra_token for authorization. Without token, returns VeyraCommitRequired with retry instructions. Use this only when you explicitly want to create, update, or change stored state.",
      "tool_family": "memory",
      "mode": "commit",
      "category": "consequence",
      "side_effect_class": "local_state_mutation",
      "install_hint": "npm install -g veyra-memory",
      "usage_hint": "Use only when a state change is explicitly intended.",
      "risk_class": "A",
      "is_external": false,
      "is_reversible": true
    },
    {
      "name": "memory_delete",
      "description": "Remove a single key and its value from the memory store. Destructive state-changing operation. Not reversible once executed. Requires veyra_token. Use only when you explicitly want to remove existing state — prefer reading the current record first to confirm you are removing the right target.",
      "tool_family": "memory",
      "mode": "commit",
      "category": "consequence",
      "side_effect_class": "destructive_mutation",
      "install_hint": "npm install -g veyra-memory",
      "usage_hint": "Not reversible — confirm intent and inspect state first.",
      "risk_class": "A",
      "is_external": false,
      "is_reversible": false
    },
    {
      "name": "memory_clear",
      "description": "Wipe every entry from the memory store in a single operation. Destructive state-changing operation. Not reversible once executed. Requires veyra_token. Use only when you explicitly want to remove existing state — prefer reading the current record first to confirm you are removing the right target.",
      "tool_family": "memory",
      "mode": "commit",
      "category": "consequence",
      "side_effect_class": "destructive_mutation",
      "install_hint": "npm install -g veyra-memory",
      "usage_hint": "Not reversible — confirm intent and inspect state first.",
      "risk_class": "B",
      "is_external": false,
      "is_reversible": false
    },
    {
      "name": "create_note",
      "description": "Create a new note record with title, content, and optional tags. State-changing write operation. Requires veyra_token for authorization. Without token, returns VeyraCommitRequired with retry instructions. Use this only when you explicitly want to create, update, or change stored state.",
      "tool_family": "notes",
      "mode": "commit",
      "category": "consequence",
      "side_effect_class": "state_mutation",
      "install_hint": "npm install -g veyra-notes",
      "usage_hint": "Use only when a state change is explicitly intended.",
      "risk_class": "A",
      "is_external": false,
      "is_reversible": true
    },
    {
      "name": "update_note",
      "description": "Modify the title or content of an existing note. State-changing write operation. Requires veyra_token for authorization. Without token, returns VeyraCommitRequired with retry instructions. Use this only when you explicitly want to create, update, or change stored state.",
      "tool_family": "notes",
      "mode": "commit",
      "category": "consequence",
      "side_effect_class": "state_mutation",
      "install_hint": "npm install -g veyra-notes",
      "usage_hint": "Use only when a state change is explicitly intended.",
      "risk_class": "A",
      "is_external": false,
      "is_reversible": true
    },
    {
      "name": "delete_note",
      "description": "Permanently delete a note and its content. Destructive state-changing operation. Not reversible once executed. Requires veyra_token. Use only when you explicitly want to remove existing state — prefer reading the current record first to confirm you are removing the right target.",
      "tool_family": "notes",
      "mode": "commit",
      "category": "consequence",
      "side_effect_class": "destructive_mutation",
      "install_hint": "npm install -g veyra-notes",
      "usage_hint": "Not reversible — confirm intent and inspect state first.",
      "risk_class": "A",
      "is_external": false,
      "is_reversible": false
    },
    {
      "name": "create_task",
      "description": "Create a new task record. State-changing write operation. Requires veyra_token for authorization. Without token, returns VeyraCommitRequired with retry instructions. Use this only when you explicitly want to create, update, or change stored state.",
      "tool_family": "tasks",
      "mode": "commit",
      "category": "consequence",
      "side_effect_class": "state_mutation",
      "install_hint": "npm install -g veyra-tasks",
      "usage_hint": "Use only when a state change is explicitly intended.",
      "risk_class": "A",
      "is_external": false,
      "is_reversible": true
    },
    {
      "name": "update_task",
      "description": "Modify an existing task's fields (title, status, priority, due). State-changing write operation. Requires veyra_token for authorization. Without token, returns VeyraCommitRequired with retry instructions. Use this only when you explicitly want to create, update, or change stored state.",
      "tool_family": "tasks",
      "mode": "commit",
      "category": "consequence",
      "side_effect_class": "state_mutation",
      "install_hint": "npm install -g veyra-tasks",
      "usage_hint": "Use only when a state change is explicitly intended.",
      "risk_class": "A",
      "is_external": false,
      "is_reversible": true
    },
    {
      "name": "delete_task",
      "description": "Permanently delete a task record. Destructive state-changing operation. Not reversible once executed. Requires veyra_token. Use only when you explicitly want to remove existing state — prefer reading the current record first to confirm you are removing the right target.",
      "tool_family": "tasks",
      "mode": "commit",
      "category": "consequence",
      "side_effect_class": "destructive_mutation",
      "install_hint": "npm install -g veyra-tasks",
      "usage_hint": "Not reversible — confirm intent and inspect state first.",
      "risk_class": "A",
      "is_external": false,
      "is_reversible": false
    },
    {
      "name": "save_snippet",
      "description": "Save a new code snippet with title, language, and code body. State-changing write operation. Requires veyra_token for authorization. Without token, returns VeyraCommitRequired with retry instructions. Use this only when you explicitly want to create, update, or change stored state.",
      "tool_family": "snippets",
      "mode": "commit",
      "category": "consequence",
      "side_effect_class": "state_mutation",
      "install_hint": "npm install -g veyra-snippets",
      "usage_hint": "Use only when a state change is explicitly intended.",
      "risk_class": "A",
      "is_external": false,
      "is_reversible": true
    },
    {
      "name": "update_snippet",
      "description": "Modify an existing snippet's code or title. State-changing write operation. Requires veyra_token for authorization. Without token, returns VeyraCommitRequired with retry instructions. Use this only when you explicitly want to create, update, or change stored state.",
      "tool_family": "snippets",
      "mode": "commit",
      "category": "consequence",
      "side_effect_class": "state_mutation",
      "install_hint": "npm install -g veyra-snippets",
      "usage_hint": "Use only when a state change is explicitly intended.",
      "risk_class": "A",
      "is_external": false,
      "is_reversible": true
    },
    {
      "name": "delete_snippet",
      "description": "Permanently delete a code snippet. Destructive state-changing operation. Not reversible once executed. Requires veyra_token. Use only when you explicitly want to remove existing state — prefer reading the current record first to confirm you are removing the right target.",
      "tool_family": "snippets",
      "mode": "commit",
      "category": "consequence",
      "side_effect_class": "destructive_mutation",
      "install_hint": "npm install -g veyra-snippets",
      "usage_hint": "Not reversible — confirm intent and inspect state first.",
      "risk_class": "A",
      "is_external": false,
      "is_reversible": false
    },
    {
      "name": "save_bookmark",
      "description": "Save a new bookmark with URL, title, and optional tags or category. State-changing write operation. Requires veyra_token for authorization. Without token, returns VeyraCommitRequired with retry instructions. Use this only when you explicitly want to create, update, or change stored state.",
      "tool_family": "bookmarks",
      "mode": "commit",
      "category": "consequence",
      "side_effect_class": "state_mutation",
      "install_hint": "npm install -g veyra-bookmarks",
      "usage_hint": "Use only when a state change is explicitly intended.",
      "risk_class": "A",
      "is_external": false,
      "is_reversible": true
    },
    {
      "name": "update_bookmark",
      "description": "Modify an existing bookmark's title or category. State-changing write operation. Requires veyra_token for authorization. Without token, returns VeyraCommitRequired with retry instructions. Use this only when you explicitly want to create, update, or change stored state.",
      "tool_family": "bookmarks",
      "mode": "commit",
      "category": "consequence",
      "side_effect_class": "state_mutation",
      "install_hint": "npm install -g veyra-bookmarks",
      "usage_hint": "Use only when a state change is explicitly intended.",
      "risk_class": "A",
      "is_external": false,
      "is_reversible": true
    },
    {
      "name": "delete_bookmark",
      "description": "Permanently delete a bookmark. Destructive state-changing operation. Not reversible once executed. Requires veyra_token. Use only when you explicitly want to remove existing state — prefer reading the current record first to confirm you are removing the right target.",
      "tool_family": "bookmarks",
      "mode": "commit",
      "category": "consequence",
      "side_effect_class": "destructive_mutation",
      "install_hint": "npm install -g veyra-bookmarks",
      "usage_hint": "Not reversible — confirm intent and inspect state first.",
      "risk_class": "A",
      "is_external": false,
      "is_reversible": false
    },
    {
      "name": "create_contact",
      "description": "Create a new contact record with name, email, and company. State-changing write operation. Requires veyra_token for authorization. Without token, returns VeyraCommitRequired with retry instructions. Use this only when you explicitly want to create, update, or change stored state.",
      "tool_family": "contacts",
      "mode": "commit",
      "category": "consequence",
      "side_effect_class": "state_mutation",
      "install_hint": "npm install -g veyra-contacts",
      "usage_hint": "Use only when a state change is explicitly intended.",
      "risk_class": "B",
      "is_external": false,
      "is_reversible": true
    },
    {
      "name": "update_contact",
      "description": "Modify an existing contact's fields. State-changing write operation. Requires veyra_token for authorization. Without token, returns VeyraCommitRequired with retry instructions. Use this only when you explicitly want to create, update, or change stored state.",
      "tool_family": "contacts",
      "mode": "commit",
      "category": "consequence",
      "side_effect_class": "state_mutation",
      "install_hint": "npm install -g veyra-contacts",
      "usage_hint": "Use only when a state change is explicitly intended.",
      "risk_class": "B",
      "is_external": false,
      "is_reversible": true
    },
    {
      "name": "delete_contact",
      "description": "Permanently delete a contact record. Destructive state-changing operation. Not reversible once executed. Requires veyra_token. Use only when you explicitly want to remove existing state — prefer reading the current record first to confirm you are removing the right target.",
      "tool_family": "contacts",
      "mode": "commit",
      "category": "consequence",
      "side_effect_class": "destructive_mutation",
      "install_hint": "npm install -g veyra-contacts",
      "usage_hint": "Not reversible — confirm intent and inspect state first.",
      "risk_class": "B",
      "is_external": false,
      "is_reversible": false
    },
    {
      "name": "create_form",
      "description": "Create a new form definition with a set of fields. State-changing write operation. Requires veyra_token for authorization. Without token, returns VeyraCommitRequired with retry instructions. Use this only when you explicitly want to create, update, or change stored state.",
      "tool_family": "forms",
      "mode": "commit",
      "category": "consequence",
      "side_effect_class": "state_mutation",
      "install_hint": "npm install -g veyra-forms",
      "usage_hint": "Use only when a state change is explicitly intended.",
      "risk_class": "A",
      "is_external": false,
      "is_reversible": true
    },
    {
      "name": "submit_response",
      "description": "Submit a response payload to an existing form definition. State-changing write operation. Requires veyra_token for authorization. Without token, returns VeyraCommitRequired with retry instructions. Use this only when you explicitly want to create, update, or change stored state.",
      "tool_family": "forms",
      "mode": "commit",
      "category": "consequence",
      "side_effect_class": "state_mutation",
      "install_hint": "npm install -g veyra-forms",
      "usage_hint": "Use only when a state change is explicitly intended.",
      "risk_class": "A",
      "is_external": false,
      "is_reversible": false
    },
    {
      "name": "delete_form",
      "description": "Permanently delete a form definition and every submitted response. Destructive state-changing operation. Not reversible once executed. Requires veyra_token. Use only when you explicitly want to remove existing state — prefer reading the current record first to confirm you are removing the right target.",
      "tool_family": "forms",
      "mode": "commit",
      "category": "consequence",
      "side_effect_class": "destructive_mutation",
      "install_hint": "npm install -g veyra-forms",
      "usage_hint": "Not reversible — confirm intent and inspect state first.",
      "risk_class": "A",
      "is_external": false,
      "is_reversible": false
    },
    {
      "name": "register_webhook",
      "description": "Register a new outbound webhook endpoint for a given event. State-changing write operation. Requires veyra_token for authorization. Without token, returns VeyraCommitRequired with retry instructions. Use this only when you explicitly want to create, update, or change stored state.",
      "tool_family": "webhooks",
      "mode": "commit",
      "category": "consequence",
      "side_effect_class": "state_mutation",
      "install_hint": "npm install -g veyra-webhooks",
      "usage_hint": "Use only when a state change is explicitly intended.",
      "risk_class": "A",
      "is_external": false,
      "is_reversible": true
    },
    {
      "name": "send_webhook",
      "description": "Trigger a real outbound HTTP POST to a registered webhook URL. External side-effect operation. Triggers a real outbound action that is not reversible once sent. Requires veyra_token. Use this only when you explicitly want to produce an external effect — prefer inspecting state and delivery history first.",
      "tool_family": "webhooks",
      "mode": "commit",
      "category": "consequence",
      "side_effect_class": "external_http_call",
      "install_hint": "npm install -g veyra-webhooks",
      "usage_hint": "Triggers a real outbound effect — use only when intended.",
      "risk_class": "C",
      "is_external": true,
      "is_reversible": false
    },
    {
      "name": "delete_webhook",
      "description": "Permanently delete a registered webhook endpoint. Destructive state-changing operation. Not reversible once executed. Requires veyra_token. Use only when you explicitly want to remove existing state — prefer reading the current record first to confirm you are removing the right target.",
      "tool_family": "webhooks",
      "mode": "commit",
      "category": "consequence",
      "side_effect_class": "destructive_mutation",
      "install_hint": "npm install -g veyra-webhooks",
      "usage_hint": "Not reversible — confirm intent and inspect state first.",
      "risk_class": "A",
      "is_external": false,
      "is_reversible": false
    }
  ],
  "veyra": {
    "api_base": "https://api.veyra.to",
    "authorize_endpoint": "https://api.veyra.to/v1/authorize-action",
    "verify_endpoint": "https://api.veyra.to/v1/verify-token",
    "receipt_endpoint": "https://api.veyra.to/v1/submit-receipt",
    "settle_endpoint": "https://api.veyra.to/v1/settle-action",
    "capability_endpoint": "https://api.veyra.to/v1/capability"
  },
  "docs_url": "https://veyra.to",
  "sdk": "npm install @veyrahq/sdk-node",
  "npx_command": "npx veyrahq",
  "client_examples": {
    "remote_url": {
      "mcpServers": {
        "veyra": {
          "url": "http://localhost:4200/sse"
        }
      }
    },
    "command": {
      "mcpServers": {
        "veyra": {
          "command": "npx",
          "args": [
            "veyrahq"
          ]
        }
      }
    }
  }
}