Koskamo

Vigil MCP

Provides agent control, signed receipts, watchdogs, opaque journal storage, and optional paid source verification. It allows agents to lease actions, notarize digests, verify receipts, and manage watchdogs for monitoring.

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.

Vigil MCP logo, by VigilVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by Vigil
You need:POST /v1/register with {"handle":"your-name"} returns a once-issued bearer key.
MCP endpoint (Streamable HTTP)
https://vigilnotary.com/mcp
Vendor documentation

What its tools do

26 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

26 of 26 have a description · 26 of 26 declare behavior hints · 22 of 23 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to vigilnotary.com ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Lease agent actions with signed receipts
  • Notarize data digests for audit trails
  • Set up watchdogs to monitor external events
  • Verify source claims for AI agents

Source and maintenance

Vendor evidenceRegistry 0.1.0

Protocol and capabilities

Server
vigil 0.1-mvp
MCP protocol negotiated in check
2025-06-18
Tools
26 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Vigil is an outside witness for AI agents: a notary, a dead-man switch, and a private journal. Call vigil_register once to get a bearer key (shown a single time — store it in the client). Prefer the HTTP Authorization header; legacy vigil_key arguments remain supported. vigil_notarize signs a submitted digest and its chain position; it does not inspect the subject or establish its truth. Verify receipts against an independently pinned public key. vigil_set_watchdog + vigil_heartbeat let something notice your absence and deliver a signed alert, retrying failures. Encrypt journal blobs client-side; Vigil stores supplied bytes and cannot enforce encryption. Free tier: 1 watchdog, 10 receipts/day, 4 journal slots.

Tools

26 advertised

vigil_info
Advertised by the server during the last successful anonymous check.
Advertised read-only

Service description, the Ed25519 signing pubkey to verify receipts against, current chain head, and free-tier limits. No key required.

vigil_info input schema
{
  "type": "object",
  "examples": [
    {}
  ],
  "properties": {},
  "additionalProperties": false
}
vigil_info annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
vigil_register
Advertised by the server during the last successful anonymous check.

Create a key. Returns a bearer key shown ONCE — store it; it is your only identity. No email, no account. Starts on the free tier. Creates a persistent identity. The returned key grants full account control; provision it in a trusted client, not a model transcript.

vigil_register input schema
{
  "type": "object",
  "examples": [
    {
      "handle": "example-agent"
    }
  ],
  "required": [
    "handle"
  ],
  "properties": {
    "handle": {
      "type": "string",
      "pattern": "^[a-z0-9][a-z0-9_-]{0,63}$",
      "maxLength": 64,
      "minLength": 1,
      "description": "1-64 chars, lowercase alnum plus - and _."
    }
  },
  "additionalProperties": false
}
vigil_register annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
vigil_pricing
Advertised by the server during the last successful anonymous check.
Advertised read-only

The plans and per-tier limits (free, dev, pro). No key required.

vigil_pricing input schema
{
  "type": "object",
  "examples": [
    {}
  ],
  "properties": {},
  "additionalProperties": false
}
vigil_pricing annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
vigil_usage
Advertised by the server during the last successful anonymous check.
Advertised read-only

Your current tier, its limits, and how much you've used today. Requires your key.

vigil_usage input schema
{
  "type": "object",
  "examples": [
    {}
  ],
  "required": [],
  "properties": {
    "vigil_key": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1,
      "deprecated": true,
      "description": "DEPRECATED legacy account-wide credential, including deletion and permission issuance. Prefer the client-injected HTTP Authorization: Bearer header; omit this argument when that header authenticates the request. This is not a scoped agent token."
    }
  },
  "additionalProperties": false
}
vigil_usage annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
vigil_notarize
Advertised by the server during the last successful anonymous check.

Notarize work: POST the sha256 (64 hex chars) of anything and get back an Ed25519-signed, timestamped, hash-chained, serial-numbered receipt. Chain position orders submitted records; the timestamp is a signed assertion of Vigil's clock. Free tier: 10/day. Irreversibly publishes the digest, label and account handle in the public chain; no deletion tool exists. It proves signed-data integrity, not that an action happened or a claim is true.

vigil_notarize input schema
{
  "type": "object",
  "examples": [
    {
      "label": "public example digest",
      "subject_sha256": "0000000000000000000000000000000000000000000000000000000000000000"
    }
  ],
  "required": [
    "subject_sha256"
  ],
  "properties": {
    "label": {
      "type": "string",
      "maxLength": 200,
      "description": "Optional human label, <=200 chars. Public — do not put secrets here."
    },
    "vigil_key": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1,
      "deprecated": true,
      "description": "DEPRECATED legacy account-wide credential, including deletion and permission issuance. Prefer the client-injected HTTP Authorization: Bearer header; omit this argument when that header authenticates the request. This is not a scoped agent token."
    },
    "subject_sha256": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{64}$",
      "maxLength": 64,
      "minLength": 64,
      "description": "64 lowercase hex chars: the sha256 of the thing you are notarizing."
    }
  },
  "additionalProperties": false
}
vigil_notarize annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
vigil_get_receipt
Advertised by the server during the last successful anonymous check.
Advertised read-only

Fetch a receipt by serial number. Public — anyone can read any receipt.

vigil_get_receipt input schema
{
  "type": "object",
  "examples": [
    {
      "serial": 1
    }
  ],
  "required": [
    "serial"
  ],
  "properties": {
    "serial": {
      "type": "integer",
      "maximum": 9223372036854776000,
      "minimum": 1,
      "description": "The receipt serial number."
    }
  },
  "additionalProperties": false
}
vigil_get_receipt annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
vigil_verify_receipt
Advertised by the server during the last successful anonymous check.
Advertised read-only

Verify a receipt's hash and Ed25519 signature against a mandatory, independently pinned Ed25519 public key. The key must not come from the receipt being checked. Returns valid=false for tampering, forgery, a wrong signer, or malformed input. Read-only and local to Vigil.

vigil_verify_receipt input schema
{
  "type": "object",
  "required": [
    "receipt",
    "pubkey_hex"
  ],
  "properties": {
    "receipt": {
      "type": "object",
      "description": "A full receipt object as returned by vigil_notarize / vigil_get_receipt."
    },
    "pubkey_hex": {
      "type": "string",
      "pattern": "^[0-9a-f]{64}$",
      "maxLength": 64,
      "minLength": 64,
      "description": "Mandatory Ed25519 public key pinned from a trusted out-of-band source; never copy it from the receipt."
    }
  },
  "additionalProperties": false
}
vigil_verify_receipt annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
vigil_chain
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read a range of receipts to audit chain continuity. Max 1000 per call.

vigil_chain input schema
{
  "type": "object",
  "examples": [
    {
      "to_serial": 10,
      "from_serial": 1
    }
  ],
  "properties": {
    "to_serial": {
      "type": "integer",
      "maximum": 9223372036854776000,
      "minimum": 1,
      "description": "Last serial (default = from_serial)."
    },
    "from_serial": {
      "type": "integer",
      "maximum": 9223372036854776000,
      "minimum": 1,
      "description": "First serial (default 1)."
    }
  },
  "additionalProperties": false
}
vigil_chain annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
vigil_set_watchdog
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Arm a dead-man switch. Register an interval and an https webhook; then call vigil_heartbeat before each interval elapses. Miss one and Vigil attempts a signed 'absence' payload to your webhook, retrying failed delivery. Free tier: 1 watchdog. Overwrites an existing watchdog and resets its timer and delivery state. A missed heartbeat sends the supplied message to an external HTTPS recipient; failed delivery is capped at five attempts per armed interval.

vigil_set_watchdog input schema
{
  "type": "object",
  "examples": [
    {
      "name": "agent-health",
      "message": "agent missed heartbeat",
      "interval_s": 300,
      "webhook_url": "https://alerts.example.com/vigil"
    }
  ],
  "required": [
    "name",
    "interval_s",
    "webhook_url"
  ],
  "properties": {
    "name": {
      "type": "string",
      "maxLength": 64,
      "minLength": 1,
      "description": "A name for this watchdog, 1-64 chars."
    },
    "message": {
      "type": "string",
      "maxLength": 2000,
      "description": "Optional note included in the absence payload, <=2000 chars."
    },
    "vigil_key": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1,
      "deprecated": true,
      "description": "DEPRECATED legacy account-wide credential, including deletion and permission issuance. Prefer the client-injected HTTP Authorization: Bearer header; omit this argument when that header authenticates the request. This is not a scoped agent token."
    },
    "interval_s": {
      "type": "integer",
      "maximum": 604800,
      "minimum": 60,
      "description": "Seconds allowed between heartbeats, 60..604800."
    },
    "webhook_url": {
      "type": "string",
      "pattern": "^https://[^\\s]+$",
      "maxLength": 2048,
      "minLength": 1,
      "description": "An https URL resolving to a public address; fired once on a missed heartbeat."
    }
  },
  "additionalProperties": false
}
vigil_set_watchdog annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": true
}
vigil_heartbeat
Advertised by the server during the last successful anonymous check.
Advertised destructive

'Still alive.' Reset a watchdog's timer. Call this at least once per interval. Resets the deadline and delivery state, potentially suppressing an overdue alert or rearming delivery.

vigil_heartbeat input schema
{
  "type": "object",
  "examples": [
    {
      "name": "agent-health"
    }
  ],
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "maxLength": 64,
      "minLength": 1,
      "description": "Watchdog name, 1..64 characters."
    },
    "vigil_key": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1,
      "deprecated": true,
      "description": "DEPRECATED legacy account-wide credential, including deletion and permission issuance. Prefer the client-injected HTTP Authorization: Bearer header; omit this argument when that header authenticates the request. This is not a scoped agent token."
    }
  },
  "additionalProperties": false
}
vigil_heartbeat annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": true
}
vigil_watchdog_status
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read a watchdog's state: interval, last beat, whether it is overdue, fired, or exhausted.

vigil_watchdog_status input schema
{
  "type": "object",
  "examples": [
    {
      "name": "agent-health"
    }
  ],
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "maxLength": 64,
      "minLength": 1,
      "description": "Watchdog name, 1..64 characters."
    },
    "vigil_key": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1,
      "deprecated": true,
      "description": "DEPRECATED legacy account-wide credential, including deletion and permission issuance. Prefer the client-injected HTTP Authorization: Bearer header; omit this argument when that header authenticates the request. This is not a scoped agent token."
    }
  },
  "additionalProperties": false
}
vigil_watchdog_status annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
vigil_delete_watchdog
Advertised by the server during the last successful anonymous check.
Advertised destructive

Remove a watchdog. Destructive: deletes its configuration and stops future alerts. No undo or restoration of the previous timer is provided.

vigil_delete_watchdog input schema
{
  "type": "object",
  "examples": [
    {
      "name": "agent-health"
    }
  ],
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "maxLength": 64,
      "minLength": 1,
      "description": "Watchdog name, 1..64 characters."
    },
    "vigil_key": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1,
      "deprecated": true,
      "description": "DEPRECATED legacy account-wide credential, including deletion and permission issuance. Prefer the client-injected HTTP Authorization: Bearer header; omit this argument when that header authenticates the request. This is not a scoped agent token."
    }
  },
  "additionalProperties": false
}
vigil_delete_watchdog annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
vigil_grant_lease
Advertised by the server during the last successful anonymous check.
Advertised destructive

Grant a short-lived, Ed25519-signed LEASE authorizing an agent to perform an action until it expires. A customer-run gateway verifies the lease offline (fail-closed) before letting the action through. This is the guard on a money/data-moving action. Free tier: 1 active lease (guarded agent). Security-sensitive: grants authority. Keep this account key outside the controlled agent. A signed lim string is enforced only by the customer's gateway.

vigil_grant_lease input schema
{
  "type": "object",
  "examples": [
    {
      "lim": "amount<=100usd",
      "agent": "refund-agent",
      "ttl_s": 60,
      "action": "stripe.refund"
    }
  ],
  "required": [
    "agent",
    "action",
    "ttl_s"
  ],
  "properties": {
    "lim": {
      "type": "string",
      "maxLength": 256,
      "description": "Optional limit string the gateway enforces, e.g. 'amount<=50usd'."
    },
    "agent": {
      "type": "string",
      "maxLength": 128,
      "minLength": 1,
      "description": "Identifier for the agent being authorized (1-128 chars)."
    },
    "ttl_s": {
      "type": "integer",
      "maximum": 604800,
      "minimum": 5,
      "description": "Lease lifetime in seconds, 5..604800. Keep it short; renew to extend."
    },
    "action": {
      "type": "string",
      "maxLength": 128,
      "minLength": 1,
      "description": "The action class this lease authorizes, e.g. 'stripe.refund' (1-128 chars)."
    },
    "vigil_key": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1,
      "deprecated": true,
      "description": "DEPRECATED legacy account-wide credential, including deletion and permission issuance. Prefer the client-injected HTTP Authorization: Bearer header; omit this argument when that header authenticates the request. This is not a scoped agent token."
    }
  },
  "additionalProperties": false
}
vigil_grant_lease annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": true
}
vigil_renew_lease
Advertised by the server during the last successful anonymous check.
Advertised destructive

Extend a lease with a fresh signed token and new expiry. Renewing is how a healthy agent keeps acting; stop renewing (or revoke) and it lapses. Security-sensitive: extends authority and refreshes the offline recheck window. Keep renewal credentials outside the controlled agent.

vigil_renew_lease input schema
{
  "type": "object",
  "examples": [
    {
      "ttl_s": 60,
      "lease_id": "lease_example"
    }
  ],
  "required": [
    "lease_id",
    "ttl_s"
  ],
  "properties": {
    "ttl_s": {
      "type": "integer",
      "maximum": 604800,
      "minimum": 5,
      "description": "Requested lease lifetime in seconds, 5..604800; offline trust still ends at recheck_by_ms within 30 seconds."
    },
    "lease_id": {
      "type": "string",
      "maxLength": 128,
      "minLength": 1,
      "description": "Opaque lease identifier returned by vigil_grant_lease."
    },
    "vigil_key": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1,
      "deprecated": true,
      "description": "DEPRECATED legacy account-wide credential, including deletion and permission issuance. Prefer the client-injected HTTP Authorization: Bearer header; omit this argument when that header authenticates the request. This is not a scoped agent token."
    }
  },
  "additionalProperties": false
}
vigil_renew_lease annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": true
}
vigil_revoke_lease
Advertised by the server during the last successful anonymous check.
Advertised destructive

Revoke a lease. A compliant v2 gateway refuses the old offline token at recheck_by_ms (at most 30 seconds after issue/renewal), or earlier if it polls revocation. Revocation is not instantaneous. Irreversible for this lease ID; it cannot be renewed again. Already admitted actions are not undone.

vigil_revoke_lease input schema
{
  "type": "object",
  "examples": [
    {
      "lease_id": "lease_example"
    }
  ],
  "required": [
    "lease_id"
  ],
  "properties": {
    "lease_id": {
      "type": "string",
      "maxLength": 128,
      "minLength": 1,
      "description": "Opaque lease identifier returned by vigil_grant_lease."
    },
    "vigil_key": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1,
      "deprecated": true,
      "description": "DEPRECATED legacy account-wide credential, including deletion and permission issuance. Prefer the client-injected HTTP Authorization: Bearer header; omit this argument when that header authenticates the request. This is not a scoped agent token."
    }
  },
  "additionalProperties": false
}
vigil_revoke_lease annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
vigil_lease_status
Advertised by the server during the last successful anonymous check.
Advertised read-only

Public status of a lease (active / expired / revoked). What a gateway polls for revocation. No key required.

vigil_lease_status input schema
{
  "type": "object",
  "examples": [
    {
      "lease_id": "lease_example"
    }
  ],
  "required": [
    "lease_id"
  ],
  "properties": {
    "lease_id": {
      "type": "string",
      "maxLength": 128,
      "minLength": 1,
      "description": "Opaque lease identifier returned by vigil_grant_lease."
    }
  },
  "additionalProperties": false
}
vigil_lease_status annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
vigil_verify_lease
Advertised by the server during the last successful anonymous check.
Advertised read-only

Offline, FAIL-CLOSED check of a lease token against a mandatory, independently pinned Ed25519 public key. Returns allow=true only for a valid signature before expiry and recheck_by_ms. It does not authenticate the calling agent, enforce action/amount policy, or query live revocation; a customer gateway must do those checks before every provider action. Checks signature, expiry and the signed recheck deadline only. It does not check live revocation, agent identity, action, amount or gateway policy; those checks are mandatory at the gateway.

vigil_verify_lease input schema
{
  "type": "object",
  "required": [
    "lease",
    "pubkey_hex"
  ],
  "properties": {
    "lease": {
      "type": "object",
      "description": "A full lease token from vigil_grant_lease."
    },
    "pubkey_hex": {
      "type": "string",
      "pattern": "^[0-9a-f]{64}$",
      "maxLength": 64,
      "minLength": 64,
      "description": "Mandatory Ed25519 public key pinned from a trusted out-of-band source; never copy it from the lease."
    }
  },
  "additionalProperties": false
}
vigil_verify_lease annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
vigil_leases
Advertised by the server during the last successful anonymous check.
Advertised read-only

List your leases and their states.

vigil_leases input schema
{
  "type": "object",
  "examples": [
    {}
  ],
  "required": [],
  "properties": {
    "vigil_key": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1,
      "deprecated": true,
      "description": "DEPRECATED legacy account-wide credential, including deletion and permission issuance. Prefer the client-injected HTTP Authorization: Bearer header; omit this argument when that header authenticates the request. This is not a scoped agent token."
    }
  },
  "additionalProperties": false
}
vigil_leases annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
vigil_anchors
Advertised by the server during the last successful anonymous check.
Advertised read-only

Public timestamp submissions to OpenTimestamps calendars. A submission is pending, not an independently verified Bitcoin confirmation. No key required.

vigil_anchors input schema
{
  "type": "object",
  "examples": [
    {}
  ],
  "properties": {},
  "additionalProperties": false
}
vigil_anchors annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
vigil_anchor
Advertised by the server during the last successful anonymous check.
Open-world

PRO: anchor the current chain head to OpenTimestamps on demand (the chain is auto-anchored every few hours regardless). Sends the public chain-head digest to external OpenTimestamps calendars; submission is not verified Bitcoin confirmation.

vigil_anchor input schema
{
  "type": "object",
  "examples": [
    {}
  ],
  "required": [],
  "properties": {
    "vigil_key": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1,
      "deprecated": true,
      "description": "DEPRECATED legacy account-wide credential, including deletion and permission issuance. Prefer the client-injected HTTP Authorization: Bearer header; omit this argument when that header authenticates the request. This is not a scoped agent token."
    }
  },
  "additionalProperties": false
}
vigil_anchor annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
vigil_journal_put
Advertised by the server during the last successful anonymous check.
Advertised destructive

Store an opaque blob under a slug (overwrites). Encrypt client-side: the server stores exactly the bytes supplied and cannot enforce client encryption. Send bytes as base64. Free tier: 4 slots, 64KB each. Destructive when the slug exists: previous bytes are replaced with no version history or undo.

vigil_journal_put input schema
{
  "type": "object",
  "examples": [
    {
      "slug": "encrypted-state",
      "data_base64": "ZW5jcnlwdGVkLWJ5dGVz"
    }
  ],
  "required": [
    "slug",
    "data_base64"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "maxLength": 64,
      "minLength": 1,
      "description": "1-64 alnum/-/_ chars."
    },
    "vigil_key": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1,
      "deprecated": true,
      "description": "DEPRECATED legacy account-wide credential, including deletion and permission issuance. Prefer the client-injected HTTP Authorization: Bearer header; omit this argument when that header authenticates the request. This is not a scoped agent token."
    },
    "data_base64": {
      "type": "string",
      "maxLength": 100000,
      "description": "The (already-encrypted) bytes, base64-encoded."
    }
  },
  "additionalProperties": false
}
vigil_journal_put annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": true
}
vigil_journal_get
Advertised by the server during the last successful anonymous check.
Advertised read-only

Fetch a journal blob by slug. Returns base64 (decrypt client-side).

vigil_journal_get input schema
{
  "type": "object",
  "examples": [
    {
      "slug": "encrypted-state"
    }
  ],
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "maxLength": 64,
      "minLength": 1,
      "description": "Journal slot name, 1..64 ASCII letters, numbers, hyphens, or underscores."
    },
    "vigil_key": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1,
      "deprecated": true,
      "description": "DEPRECATED legacy account-wide credential, including deletion and permission issuance. Prefer the client-injected HTTP Authorization: Bearer header; omit this argument when that header authenticates the request. This is not a scoped agent token."
    }
  },
  "additionalProperties": false
}
vigil_journal_get annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
vigil_journal_list
Advertised by the server during the last successful anonymous check.
Advertised read-only

List your journal slots (slug, size, last-updated).

vigil_journal_list input schema
{
  "type": "object",
  "examples": [
    {}
  ],
  "required": [],
  "properties": {
    "vigil_key": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1,
      "deprecated": true,
      "description": "DEPRECATED legacy account-wide credential, including deletion and permission issuance. Prefer the client-injected HTTP Authorization: Bearer header; omit this argument when that header authenticates the request. This is not a scoped agent token."
    }
  },
  "additionalProperties": false
}
vigil_journal_list annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
vigil_journal_delete
Advertised by the server during the last successful anonymous check.
Advertised destructive

Delete a journal slot. Destructive: removes stored bytes with no undo through the API.

vigil_journal_delete input schema
{
  "type": "object",
  "examples": [
    {
      "slug": "encrypted-state"
    }
  ],
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "maxLength": 64,
      "minLength": 1,
      "description": "Journal slot name, 1..64 ASCII letters, numbers, hyphens, or underscores."
    },
    "vigil_key": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1,
      "deprecated": true,
      "description": "DEPRECATED legacy account-wide credential, including deletion and permission issuance. Prefer the client-injected HTTP Authorization: Bearer header; omit this argument when that header authenticates the request. This is not a scoped agent token."
    }
  },
  "additionalProperties": false
}
vigil_journal_delete annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
vigil_revoke_key
Advertised by the server during the last successful anonymous check.
Advertised destructive

Revoke your own key. It stops authenticating immediately. Irreversible. Irreversible: also revokes the account's leases and deletes its watchdogs. Private journal access is lost; public receipts remain. It does not cancel a Stripe subscription.

vigil_revoke_key input schema
{
  "type": "object",
  "examples": [
    {}
  ],
  "required": [],
  "properties": {
    "vigil_key": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1,
      "deprecated": true,
      "description": "DEPRECATED legacy account-wide credential, including deletion and permission issuance. Prefer the client-injected HTTP Authorization: Bearer header; omit this argument when that header authenticates the request. This is not a scoped agent token."
    }
  },
  "additionalProperties": false
}
vigil_revoke_key annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
vigil_verify_source
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Paid source-local verification with exact evidence and signed receipt. Does not establish absolute truth. Read price and payment requirements before authorizing; settlement spends USDC irreversibly and there is no automatic refund. Identical tool arguments alone are NOT idempotent: retry with the identical arguments, same vigil/idempotency-key metadata and original payment proof.

vigil_verify_source input schema
{
  "type": "object",
  "required": [
    "source_url",
    "claim"
  ],
  "properties": {
    "claim": {
      "type": "string",
      "pattern": "\\S",
      "maxLength": 2000,
      "minLength": 1
    },
    "options": {
      "type": "object",
      "properties": {
        "max_price_usd": {
          "type": "string",
          "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]{1,6})?$",
          "maxLength": 32
        },
        "max_age_seconds": {
          "type": "integer",
          "default": 60,
          "maximum": 300,
          "minimum": 0
        }
      },
      "additionalProperties": false
    },
    "source_url": {
      "type": "string",
      "format": "uri",
      "pattern": "^https://[^\\s]+$",
      "maxLength": 2048
    }
  },
  "additionalProperties": false
}
vigil_verify_source output schema
{
  "type": "object",
  "allOf": [
    {
      "if": {
        "properties": {
          "assessment_scope": {
            "const": "literal_quotation_only"
          }
        }
      },
      "then": {
        "properties": {
          "evidence": {
            "items": {
              "properties": {
                "stance": {
                  "const": "mentions"
                }
              }
            }
          },
          "claim_support": {
            "enum": [
              "not_assessed",
              "insufficient_evidence"
            ]
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "claim_support": {
            "const": "supports"
          }
        }
      },
      "then": {
        "properties": {
          "evidence": {
            "allOf": [
              {
                "contains": {
                  "required": [
                    "stance"
                  ],
                  "properties": {
                    "stance": {
                      "const": "supports"
                    }
                  }
                },
                "minContains": 1
              }
            ]
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "claim_support": {
            "const": "contradicts"
          }
        }
      },
      "then": {
        "properties": {
          "evidence": {
            "allOf": [
              {
                "contains": {
                  "required": [
                    "stance"
                  ],
                  "properties": {
                    "stance": {
                      "const": "contradicts"
                    }
                  }
                },
                "minContains": 1
              }
            ]
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "claim_support": {
            "const": "mixed"
          }
        }
      },
      "then": {
        "properties": {
          "evidence": {
            "allOf": [
              {
                "contains": {
                  "required": [
                    "stance"
                  ],
                  "properties": {
                    "stance": {
                      "const": "supports"
                    }
                  }
                },
                "minContains": 1
              },
              {
                "contains": {
                  "required": [
                    "stance"
                  ],
                  "properties": {
                    "stance": {
                      "const": "contradicts"
                    }
                  }
                },
                "minContains": 1
              }
            ]
          }
        }
      }
    }
  ],
  "required": [
    "schema_version",
    "request_id",
    "status",
    "verification_type",
    "source",
    "reachable",
    "source_identity",
    "claim",
    "claim_support",
    "explanation",
    "evidence",
    "confidence",
    "risk_flags",
    "checked_at",
    "served_at",
    "methodology_version",
    "assessment_scope",
    "limits",
    "cache",
    "payment",
    "receipt"
  ],
  "properties": {
    "cache": {
      "type": "object",
      "required": [
        "hit",
        "age_seconds",
        "original_checked_at"
      ],
      "properties": {
        "hit": {
          "type": "boolean"
        },
        "age_seconds": {
          "type": "integer",
          "minimum": 0
        },
        "original_checked_at": {
          "type": "string",
          "format": "date-time",
          "pattern": "^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]{1,6})?Z$"
        }
      },
      "additionalProperties": false
    },
    "claim": {
      "type": "string",
      "maxLength": 2000,
      "minLength": 1
    },
    "limits": {
      "type": "object",
      "required": [
        "max_text_chars"
      ],
      "properties": {
        "fixture": {
          "const": true
        },
        "max_redirects": {
          "type": "integer",
          "maximum": 5,
          "minimum": 0
        },
        "max_text_chars": {
          "type": "integer",
          "maximum": 100000,
          "minimum": 1
        },
        "max_wire_bytes": {
          "type": "integer",
          "maximum": 4194304,
          "minimum": 1
        },
        "timeout_seconds": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 60,
              "minimum": 1
            },
            {
              "type": "string",
              "pattern": "^(0|[1-9][0-9]*)\\.[0-9]+$"
            }
          ]
        },
        "max_header_bytes": {
          "type": "integer",
          "maximum": 65536,
          "minimum": 1
        },
        "max_decoded_bytes": {
          "type": "integer",
          "maximum": 8388608,
          "minimum": 1
        },
        "socket_timeout_seconds": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 15,
              "minimum": 1
            },
            {
              "type": "string",
              "pattern": "^(0|[1-9][0-9]*)\\.[0-9]+$"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "source": {
      "type": "object",
      "required": [
        "requested_url",
        "final_url",
        "http_status",
        "content_type",
        "content_sha256",
        "text_sha256",
        "normalized_text",
        "offset_unit",
        "redirects",
        "wire_bytes",
        "decoded_bytes"
      ],
      "properties": {
        "final_url": {
          "type": "string",
          "format": "uri",
          "pattern": "^https://",
          "maxLength": 49152
        },
        "redirects": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "url",
              "status"
            ],
            "properties": {
              "url": {
                "type": "string",
                "format": "uri",
                "pattern": "^https://",
                "maxLength": 49152
              },
              "status": {
                "enum": [
                  301,
                  302,
                  303,
                  307,
                  308
                ]
              }
            },
            "additionalProperties": false
          },
          "maxItems": 5
        },
        "wire_bytes": {
          "type": "integer",
          "maximum": 26000000,
          "minimum": 0
        },
        "http_status": {
          "const": 200
        },
        "offset_unit": {
          "const": "unicode_codepoint"
        },
        "text_sha256": {
          "type": "string",
          "pattern": "^[0-9a-f]{64}$"
        },
        "content_type": {
          "type": "string",
          "pattern": "^[Tt][Ee][Xx][Tt]/([Hh][Tt][Mm][Ll]|[Pp][Ll][Aa][Ii][Nn])(?:\\s*;.*)?$",
          "maxLength": 32768
        },
        "decoded_bytes": {
          "type": "integer",
          "maximum": 8388608,
          "minimum": 0
        },
        "requested_url": {
          "type": "string",
          "format": "uri",
          "pattern": "^https://[^\\s]+$",
          "maxLength": 2048
        },
        "content_sha256": {
          "type": "string",
          "pattern": "^[0-9a-f]{64}$"
        },
        "normalized_text": {
          "type": "string",
          "maxLength": 100000
        }
      },
      "additionalProperties": false
    },
    "status": {
      "const": "completed"
    },
    "payment": {
      "type": "object",
      "required": [
        "status",
        "provider",
        "mode",
        "simulated",
        "network",
        "asset",
        "currency",
        "amount_atomic",
        "price_usd",
        "transaction",
        "facilitator_fee_usd",
        "network_fee_usd"
      ],
      "properties": {
        "mode": {
          "enum": [
            "offline",
            "testnet",
            "mainnet"
          ]
        },
        "asset": {
          "type": "string",
          "maxLength": 128,
          "minLength": 1
        },
        "status": {
          "const": "settled"
        },
        "network": {
          "enum": [
            "eip155:8453",
            "eip155:84532",
            "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
            "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",
            "none"
          ]
        },
        "currency": {
          "const": "USDC"
        },
        "provider": {
          "type": "string",
          "maxLength": 64,
          "minLength": 1
        },
        "price_usd": {
          "type": "string",
          "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]{1,6})?$",
          "maxLength": 32
        },
        "simulated": {
          "type": "boolean"
        },
        "transaction": {
          "type": [
            "string",
            "null"
          ],
          "maxLength": 512
        },
        "amount_atomic": {
          "type": "string",
          "pattern": "^(0|[1-9][0-9]{0,17})$"
        },
        "network_fee_usd": {
          "anyOf": [
            {
              "type": "string",
              "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]{1,6})?$",
              "maxLength": 32
            },
            {
              "type": "null"
            }
          ]
        },
        "facilitator_fee_usd": {
          "anyOf": [
            {
              "type": "string",
              "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]{1,6})?$",
              "maxLength": 32
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "description": "USDC uses six atomic decimals. Offline mock payments simulate USDC and move no funds. Null fees are unknown, not zero.",
      "additionalProperties": false
    },
    "receipt": {
      "type": "object",
      "required": [
        "envelope",
        "canonical_envelope_base64",
        "attestation",
        "verification"
      ],
      "properties": {
        "envelope": {
          "type": "object",
          "required": [
            "type",
            "version",
            "request_id",
            "result_sha256",
            "checked_at",
            "methodology_version",
            "payment",
            "issued_at"
          ],
          "properties": {
            "type": {
              "const": "vigil.source-verification.purchase"
            },
            "payment": {
              "type": "object",
              "required": [
                "status",
                "provider",
                "mode",
                "simulated",
                "network",
                "asset",
                "currency",
                "amount_atomic",
                "price_usd",
                "transaction",
                "facilitator_fee_usd",
                "network_fee_usd"
              ],
              "properties": {
                "mode": {
                  "enum": [
                    "offline",
                    "testnet",
                    "mainnet"
                  ]
                },
                "asset": {
                  "type": "string",
                  "maxLength": 128,
                  "minLength": 1
                },
                "status": {
                  "const": "settled"
                },
                "network": {
                  "enum": [
                    "eip155:8453",
                    "eip155:84532",
                    "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
                    "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",
                    "none"
                  ]
                },
                "currency": {
                  "const": "USDC"
                },
                "provider": {
                  "type": "string",
                  "maxLength": 64,
                  "minLength": 1
                },
                "price_usd": {
                  "type": "string",
                  "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]{1,6})?$",
                  "maxLength": 32
                },
                "simulated": {
                  "type": "boolean"
                },
                "transaction": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "maxLength": 512
                },
                "amount_atomic": {
                  "type": "string",
                  "pattern": "^(0|[1-9][0-9]{0,17})$"
                },
                "network_fee_usd": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]{1,6})?$",
                      "maxLength": 32
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "facilitator_fee_usd": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]{1,6})?$",
                      "maxLength": 32
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "description": "USDC uses six atomic decimals. Offline mock payments simulate USDC and move no funds. Null fees are unknown, not zero.",
              "additionalProperties": false
            },
            "version": {
              "const": 1
            },
            "issued_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]{1,6})?Z$"
            },
            "checked_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]{1,6})?Z$"
            },
            "request_id": {
              "type": "string",
              "format": "uuid"
            },
            "result_sha256": {
              "type": "string",
              "pattern": "^[0-9a-f]{64}$"
            },
            "methodology_version": {
              "type": "string",
              "maxLength": 256,
              "minLength": 1
            }
          },
          "additionalProperties": false
        },
        "attestation": {
          "type": "object",
          "required": [
            "v",
            "serial",
            "subject_sha256",
            "label",
            "requested_by",
            "key_id",
            "ts_ms",
            "ts_utc",
            "prev_hash",
            "pubkey_hex",
            "receipt_hash",
            "sig_ed25519_hex"
          ],
          "properties": {
            "v": {
              "const": 1
            },
            "label": {
              "type": [
                "string",
                "null"
              ],
              "maxLength": 200
            },
            "ts_ms": {
              "type": "integer",
              "minimum": 0
            },
            "key_id": {
              "type": "integer",
              "minimum": 0
            },
            "serial": {
              "type": "integer",
              "minimum": 1
            },
            "ts_utc": {
              "type": "string",
              "format": "date-time",
              "pattern": "^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]{1,6})?Z$"
            },
            "prev_hash": {
              "type": "string",
              "pattern": "^[0-9a-f]{64}$"
            },
            "pubkey_hex": {
              "type": "string",
              "pattern": "^[0-9a-f]{64}$"
            },
            "receipt_hash": {
              "type": "string",
              "pattern": "^[0-9a-f]{64}$"
            },
            "requested_by": {
              "type": "string",
              "maxLength": 128,
              "minLength": 1
            },
            "subject_sha256": {
              "type": "string",
              "pattern": "^[0-9a-f]{64}$"
            },
            "sig_ed25519_hex": {
              "type": "string",
              "pattern": "^[0-9a-f]{128}$"
            }
          },
          "additionalProperties": false
        },
        "verification": {
          "type": "string",
          "maxLength": 1000,
          "minLength": 1
        },
        "canonical_envelope_base64": {
          "type": "string",
          "pattern": "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$",
          "maxLength": 16384,
          "minLength": 4,
          "contentEncoding": "base64"
        }
      },
      "description": "Pin Vigil's key independently. Verify the Ed25519 attestation, SHA256 of canonical envelope bytes, and SHA256 of the result with receipt removed. Schema validation alone does not authenticate a receipt.",
      "additionalProperties": false
    },
    "evidence": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "evidence_id",
          "quote",
          "start",
          "end",
          "stance",
          "source_sha256",
          "text_sha256"
        ],
        "properties": {
          "end": {
            "type": "integer",
            "maximum": 100000,
            "minimum": 1
          },
          "quote": {
            "type": "string",
            "maxLength": 1000,
            "minLength": 1
          },
          "start": {
            "type": "integer",
            "maximum": 99999,
            "minimum": 0
          },
          "stance": {
            "enum": [
              "supports",
              "contradicts",
              "mentions"
            ]
          },
          "evidence_id": {
            "type": "string",
            "pattern": "^e[1-6]$"
          },
          "text_sha256": {
            "type": "string",
            "pattern": "^[0-9a-f]{64}$"
          },
          "source_sha256": {
            "type": "string",
            "pattern": "^[0-9a-f]{64}$"
          }
        },
        "description": "Offsets count Unicode code points in source.normalized_text. Verify start < end and exact substring/digest matches independently; JSON Schema cannot establish them.",
        "additionalProperties": false
      },
      "maxItems": 6
    },
    "reachable": {
      "const": true
    },
    "served_at": {
      "type": "string",
      "format": "date-time",
      "pattern": "^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]{1,6})?Z$"
    },
    "checked_at": {
      "type": "string",
      "format": "date-time",
      "pattern": "^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]{1,6})?Z$"
    },
    "confidence": {
      "type": "null",
      "description": "No numerical confidence is published before calibration."
    },
    "request_id": {
      "type": "string",
      "format": "uuid"
    },
    "risk_flags": {
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^[a-z][a-z0-9_]*$",
        "maxLength": 128
      },
      "maxItems": 32,
      "uniqueItems": true
    },
    "explanation": {
      "type": "string",
      "maxLength": 800
    },
    "claim_support": {
      "enum": [
        "supports",
        "contradicts",
        "mixed",
        "insufficient_evidence",
        "not_assessed"
      ]
    },
    "schema_version": {
      "const": "1.0.0"
    },
    "source_identity": {
      "type": "object",
      "required": [
        "hostname",
        "tls_verified",
        "publisher_identity"
      ],
      "properties": {
        "hostname": {
          "type": "string",
          "maxLength": 253,
          "minLength": 1
        },
        "tls_verified": {
          "type": "boolean"
        },
        "publisher_identity": {
          "const": "unknown"
        }
      },
      "additionalProperties": false
    },
    "assessment_scope": {
      "enum": [
        "source_local_semantic_support",
        "literal_quotation_only"
      ]
    },
    "verification_type": {
      "const": "source"
    },
    "methodology_version": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1
    }
  },
  "description": "A completed source observation and purchase. Retrieval failures return the error contract and are not submitted for settlement. Source support does not establish truth.",
  "additionalProperties": false
}
vigil_verify_source annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": true
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

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
694 ms
95th percentile latency
694 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 694 ms · metadata changed · 26 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http vigil-mcp-vigilnotary https://vigilnotary.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add vigil-mcp-vigilnotary --url https://vigilnotary.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable vigil-mcp-vigilnotary in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "vigil-mcp-vigilnotary": {
      "url": "https://vigilnotary.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "vigil-mcp-vigilnotary": {
      "type": "streamableHttp",
      "url": "https://vigilnotary.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start vigil-mcp-vigilnotary and inspect its tools.
VS Code configuration
{
  "servers": {
    "vigil-mcp-vigilnotary": {
      "type": "http",
      "url": "https://vigilnotary.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http vigil-mcp-vigilnotary https://vigilnotary.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://vigilnotary.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "vigil-mcp-vigilnotary": {
      "serverUrl": "https://vigilnotary.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Vigil MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Vigil 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.

Claim this listing