
Security News
PHP Foundation Says Chainguard Broke Security Embargo Ahead of Emergency Patches
The PHP Foundation says Chainguard broke a security embargo ahead of critical RCE patches, as leaks disrupted the coordinated release.
MCP server for X-TKN: hand a secret to a person as a one-time link, encrypted on your machine. No read tool.
Lets an AI agent hand a secret to a person as a one-time link, with no way to read it back.
npx -y @x-tkn/mcp
create_secret, check_status and
revoke_secret. Once a secret is handed over, the agent can see whether it
was opened and can cancel it. It cannot see the secret again.create_secret encrypts with AES-256-GCM
before anything is sent. X-TKN stores only ciphertext. The key travels in the
link's #fragment, which browsers never send to a server..env file, not just a
password.It runs locally over stdio for a reason. A hosted MCP server would receive the plaintext before encrypting it, and the whole point is that nobody but the recipient can read it.
You need Node 20 or later and an X-TKN API key. Developer keys are free: sign up
at x-tkn.com and create one in the account console.
Sandbox keys (from POST /accounts/sandbox) cannot create secrets.
Claude Code
claude mcp add x-tkn -e X_TKN_API_KEY=your-key -- npx -y @x-tkn/mcp
Claude Desktop, Cursor, Windsurf and other clients take the same block in their MCP config file:
{
"mcpServers": {
"x-tkn": {
"command": "npx",
"args": ["-y", "@x-tkn/mcp"],
"env": { "X_TKN_API_KEY": "your-key" }
}
}
}
Without a key the server still starts, and every tool call answers with how to get one.
create_secretEncrypts a secret and returns a link that opens it once.
| Argument | Required | What it does |
|---|---|---|
secret | yes | The text to hand over. |
expiresIn | no | { days, hours, minutes }. Defaults to the plan's: 7 days on Developer, 30 on Team. |
passphrase | no | The recipient has to type this before the secret opens. 8 to 256 characters. Team and above. |
recipientEmail | no | The recipient has to enter a 6-digit code sent to this address. Team and above. Not with passphrase. |
note | no | For your own records in the X-TKN console. Stored unencrypted and never shown to the recipient. |
Returns the link, a code for the other two tools, and expiresAt.
Send a passphrase by a different channel than the link. Anyone holding both can open the secret.
check_statusTakes the code. Returns waiting, opened, expired or revoked, with
openedAt once it has been opened. It never returns the secret.
revoke_secretTakes the code. Stops the link working, immediately and for good. A secret
that was already opened stays opened.
The ciphertext, the expiry, your note, and, if you set them, a hash of the
passphrase or the recipient's email address. The passphrase gates the link and
plays no part in the encryption. X-TKN never receives the plaintext or the key.
Opening the link uses it up, so give it only to the person it is for. The retrieval page takes the key out of the address bar after it decrypts the secret. If opening fails, the full link, key included, stays in that browser's history.
From version 1.0.1, install @x-tkn/mcp. Version 1.0.0 was published as
@fennecstudio/x-tkn-mcp; existing installations can switch their MCP config
argument to the new package name. The MCP Registry name is
io.github.x-tkn/x-tkn-mcp.
For whoever ships a release. Run these in order, from this directory. The registry steps read what npm holds, so none of them can come before the first.
Keep one version everywhere: version in package.json, VERSION in
src/version.ts, and both version fields in server.json. Specs fail when
they disagree. Keep server.json's description equal to the first paragraph
of this README, and no longer than 100 characters, which is the registry's limit.
npm. Run npm run deploy in an interactive terminal and complete the
browser security-key approval. If the account uses an authenticator code,
pass it with npm run deploy -- --otp=<code>. That is npm publish, and
prepublishOnly typechecks, tests and builds first. It goes first because
the registry reads mcpName out of the published package, and npm will not
take the same version twice.
Official MCP Registry. Install the CLI with brew install mcp-publisher,
then:
mcp-publisher login github
mcp-publisher publish
Log in as an Owner of the x-tkn GitHub organization. The registry
grants io.github.x-tkn/* to its owners only, and an ordinary member
is refused. Check it landed with
curl "https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.x-tkn/x-tkn-mcp".
Smithery. smithery mcp publish. It does not run bare: Smithery takes a
server URL or a pre-built .mcpb bundle, and -n <org>/<server>. This
package serves no URL and builds no bundle, so read smithery mcp publish --help
and Smithery's publishing docs for the current form before running it.
Glama and PulseMCP. Both crawl on their own, so there is nothing to submit. Once the listing appears, claim it on each site.
@fennecstudio/x-tkn-jsFAQs
MCP server for X-TKN: hand a secret to a person as a one-time link, encrypted on your machine. No read tool.
We found that @x-tkn/mcp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
The PHP Foundation says Chainguard broke a security embargo ahead of critical RCE patches, as leaks disrupted the coordinated release.

Security News
PHP releases emergency patches for two critical RCE vulnerabilities as agencies urge organizations to take unpatched sites offline.

Threat Research
/Security News
A supply chain attack compromised LiteLLM 1.107.0 on PyPI and Docker, spreading malware that steals cloud credentials, developer secrets, and AI provider keys.