Skip to main content
Glama
TetraCoreHQ

LinkPilot MCP Server

Official

LinkPilot MCP server

Give an AI assistant a safe way to hand someone a credential.

LinkPilot secret links open once and then destroy themselves, and the text is encrypted before it leaves this process. This is an MCP server that exposes them as tools, alongside short links.

npx -y @uselinkpilot/mcp

The problem it solves

Assistants hand people credentials constantly: a generated password, an API key, a database connection string. Every ordinary way of delivering one is bad. Pasted into chat, it lives in the history. Emailed, it lives forever. Dropped in a ticket, it is indexed.

create_secret_link returns a URL that works exactly once:

Here is the database password: https://shrd.link/s/p8mcaiitig#k=0hoNIO96aDJFoLsxaYPsP3_FeqUjb6t_w5lnSTcxkO0

It opens once and then it is gone.

Related MCP server: Vaulted MCP Server

Read this before you install it

The plaintext passes through the assistant's context. For the model to create the secret, it has to see the secret.

This server protects the credential in transit, at rest, and over time — it is encrypted before it is sent, LinkPilot cannot read it, and it survives a single view. It does not hide the value from the model that is calling the tool, and nothing built this way could.

So: use it to deliver a credential the assistant is already handling — one it just generated, or one you have pasted in deliberately. If a secret must never be seen by the assistant at all, create it yourself at uselinkpilot.com or with the linkpilot CLI instead.

A security tool that oversells itself is worse than no tool, so that is stated up front rather than in a footnote.

What the encryption actually means

The API will not accept a plaintext secret. POST /secrets takes ciphertext and an enc_version, and rejects a payload field outright.

Encryption happens in this process, via @uselinkpilot/sdk: AES-GCM-256, with the key generated locally. The key travels in the URL's # fragment, which browsers never send to a server. LinkPilot stores a blob it holds no key for, and so cannot read it — nor can anyone who reaches its database or its edge.

The corollary is not a caveat, it is the guarantee working: there is no recovery. Lose the share URL and the secret is gone, including to us.

Setup

Create an API key at uselinkpilot.com/app/api-keys. Keys begin with lp_live_. API access is available on every plan, including Free.

Claude Code

claude mcp add linkpilot --env LINKPILOT_API_KEY=lp_live_your_key -- npx -y @uselinkpilot/mcp

Claude Desktop, and other MCP clients

In claude_desktop_config.json (or your client's equivalent):

{
  "mcpServers": {
    "linkpilot": {
      "command": "npx",
      "args": ["-y", "@uselinkpilot/mcp"],
      "env": { "LINKPILOT_API_KEY": "lp_live_your_key" }
    }
  }
}

The key is read from the environment only. It is never written to disk by this server, and never echoed — not in a log line, not in an error, not truncated.

Tools

tool

what it does

create_secret_link

Encrypt text locally and return a one-time URL

create_short_link

Shorten a URL, with click tracking

list_links

List short links and their click counts

list_secrets

Secret metadata only: status, views, expiry

revoke_secret

Destroy a secret link immediately

whoami

Plan, limits, usage and remaining rate budget

list_secrets cannot return a secret's contents. No API route can — there is no route that returns a payload or a key, which is what makes the guarantee above structural rather than a promise.

revoke_secret is annotated destructiveHint, so a well-behaved client will confirm before calling it. The three read-only tools are annotated as such, so it will not nag about those.

argument

secret

The text to protect. Required.

expires_in

"30m", "2h", "7d", or seconds. Optional.

burn_after_read

Default true.

passphrase

Pro plans. A second factor the recipient must type.

A passphrase is mixed into the key and sent as a SHA-256 hash, so the server can refuse to hand over the ciphertext at all. The passphrase itself is never transmitted. Send it over a different channel from the link, or it adds nothing.

Verifying the encryption

You do not have to take any of this on trust.

The wire format is specified at uselinkpilot.com/developers, and the SDK's test suite runs the same committed known-answer vectors as the LinkPilot web application and the reveal page served at the edge. Three independent implementations, one set of vectors. If any of them disagreed about a single byte, those tests would fail.

This server's own tests assert the negative directly: for every secret path, the plaintext and the key must not appear anywhere in the request, and the key taken from the returned share URL must decrypt exactly what was sent.

Development

npm ci
npm run build
npm run typecheck
npm test

Tests run a real MCP Client against a real server over an in-memory transport, with only the network stubbed, so the input schemas and the result envelope are exercised the way a real host exercises them.

Licence

MIT

Available Tools

6 tools
list_secretsList secret linksA
Read-onlyIdempotent

List secret links on the account. METADATA ONLY: status, view count and expiry. No route can return the secret text or the key, by design, so this cannot be used to read a secret back. Use it to check whether one has been opened yet.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many to return. Default 20.
cursorNoCursor from a previous call, to fetch the next page.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this a safe, idempotent read, so the safety profile is covered. The description adds real behavioral content beyond that: a hard capability ceiling (secret text is never returned by design) and the shape of what is returned (status, view count, expiry, metadata only). It does not discuss pagination behavior, but that gap is minor against the annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the action and capability boundary, then the usage case. Every sentence carries distinct information and none restates the name or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly compensates by enumerating the returned metadata fields, and the remaining mechanics (limit, cursor) are fully specified in the schema. Nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so limit and cursor are already documented in the schema with their defaults and semantics. The description adds no additional parameter meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List secret links on the account') and immediately bounds the scope with what the tool cannot do ('no route can return the secret text or the key'). An agent can distinguish it from the sibling list_links and from any retrieval intent without inspecting the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete when-to-use case ('check whether one has been opened yet') and an explicit when-not ('cannot be used to read a secret back'), which is genuinely useful for steering the agent away from a wrong expectation. It stops short of naming alternatives such as list_links or revoke_secret, so routing between siblings is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

revoke_secretRevoke a secret linkA
DestructiveIdempotent

Destroy a secret link immediately so it can never be opened. Irreversible. Use it when a secret was shared by mistake or is no longer needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe secret's id, from create_secret_link or list_secrets.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is partly covered. The description adds value by spelling out the concrete effect ('immediately', 'can never be opened', 'Irreversible'), which tells the agent what actually happens rather than just that it is destructive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short, front-loaded sentences: effect, irreversibility, then usage condition. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter destructive tool with rich annotations and no output schema, the description covers what it does, that it is irreversible, and when to use it. It could add a note on repeated invocation behavior, but annotations largely cover idempotency.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema already explains the sole 'id' parameter and where to obtain it (create_secret_link or list_secrets). The description adds no parameter-level information beyond that, so this is the standard baseline for fully documented schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (destroy/revoke) and resource (secret link) plus the concrete consequence ('can never be opened'). This clearly separates it from siblings like create_secret_link and list_secrets, which act on a different lifecycle stage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use it when a secret was shared by mistake or is no longer needed' gives explicit trigger conditions for invoking the tool. It does not name an alternative tool or state when-not to use it, but the resource is distinct enough that alternatives are not ambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whoamiShow the LinkPilot accountA
Read-onlyIdempotent

Show the workspace, plan, limits, usage and remaining rate budget for the configured API key. Useful for checking a limit before a bulk operation, or for confirming which account is connected.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds real context beyond that: the data is scoped to the configured API key and includes usage/rate budget, which tells the agent this is a credentials-scoped introspection call rather than a general query.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero filler, and the payload contents are front-loaded before the usage guidance. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description enumerates the return fields an agent needs (workspace, plan, limits, usage, remaining rate budget), which is sufficient for a zero-parameter read tool. Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the description has no parameter semantics to explain; baseline for a 0-param tool is 4. It correctly implies no arguments are needed by tying the result to the already-configured API key.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Show') plus an enumerated resource set (workspace, plan, limits, usage, remaining rate budget) tied to the configured API key. None of the siblings (link/secret CRUD) overlap with this account-introspection purpose, so an agent can select it unambiguously.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives two concrete when-to-use conditions: checking a limit before a bulk operation and confirming which account is connected. It stops short of naming alternatives or exclusions, but the sibling set is so different that routing is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv0.1.1
    • First observedcreate_secret_link
    • First observedcreate_short_link
    • First observedlist_links
    • First observedlist_secrets
    • First observedrevoke_secret
    • First observedwhoami

TDQS

A4/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: secret creation, short-link creation, listing each link type, revoking secrets, and account introspection. The descriptions explicitly contrast overlapping areas, such as create_secret_link versus create_short_link. No two tools appear interchangeable.

Naming Consistency4/5

Five of six tools follow a consistent snake_case verb_noun pattern (create_secret_link, create_short_link, list_links, list_secrets, revoke_secret). The exception is whoami, which is a conventional but non-verb_noun name, making the set mostly predictable.

Tool Count5/5

Six tools is well-scoped for a link-sharing service, covering the core creation, listing, revocation, and account-check workflows. Neither too thin nor bloated for the stated purpose.

Completeness3/5

The secret-link lifecycle is well covered (create, list, revoke), but short links can only be created and listed. There is no revoke, delete, or update operation for short links, which is a notable gap for managing public branded links.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to create, manage, and analyze short URLs through complete URL shortening functionality. Supports batch operations, custom domains, click statistics, and comprehensive link management.
    6
    7 npm
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI agents to shorten URLs, manage links, and track click analytics through 8 first-class tools, designed for use with Claude Desktop, Cursor, and other MCP clients.
    9
    52 npm
    MIT