npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@voightxyz/agents-mcp

v0.2.0

Published

MCP server for Voight Agents: deploy, operate and orchestrate your AI agents from any MCP client.

Readme

@voightxyz/agents-mcp

Deploy, operate and orchestrate your Voight Agents from any MCP client.

Deploy agents on Voight cloud or Nosana GPUs, talk to one or to ten at once, schedule their work, renew and delete them, from Claude Code, Cursor, Codex, VS Code, Claude Desktop or Gemini CLI.

npm license node

Voight Agents · Docs · Voight


Voight Agents are autonomous AI agents you deploy in minutes. They run 24/7 on Voight cloud or on Nosana GPUs, browse the web, run scheduled tasks and work through the channels you connect (Telegram, GitHub and more). This package is a local Model Context Protocol server that lets your coding assistant operate them for you.

"Deploy three research agents, give each a topic, and merge what they find."
"Which of my agents are running, and how much did they use this week?"
"Schedule a daily 8:00 brief on my research agent."
"Delete the test agents we deployed this morning."

Quick start

1. Create an API key. Open agent.voight.xyz, open the account menu and choose MCP / API. Pick the access level and generate the key. It is shown once.

| Access | What it can do | Expires | | --- | --- | --- | | Agents: operate | List agents, read usage and tasks, chat, wake GPUs | Never | | Agents: full | All of the above, plus deploy, renew, schedule tasks and delete | After 90 days |

Ingest keys (the ones used by @voightxyz/sdk) do not work here, by design.

2. Add the server to your client. It runs with npx, there is nothing to install.

claude mcp add --env VOIGHT_API_KEY=vk_your_key --transport stdio voight-agents -- npx -y @voightxyz/agents-mcp

To share the config with a team without sharing the secret, commit a .mcp.json that reads the key from each person's environment:

{
  "mcpServers": {
    "voight-agents": {
      "command": "npx",
      "args": ["-y", "@voightxyz/agents-mcp"],
      "env": { "VOIGHT_API_KEY": "${VOIGHT_API_KEY}" }
    }
  }
}

~/.cursor/mcp.json (or .cursor/mcp.json in a project):

{
  "mcpServers": {
    "voight-agents": {
      "command": "npx",
      "args": ["-y", "@voightxyz/agents-mcp"],
      "env": { "VOIGHT_API_KEY": "vk_your_key" }
    }
  }
}

.vscode/mcp.json. VS Code asks for the key once and stores it securely:

{
  "inputs": [
    { "type": "promptString", "id": "voight-api-key", "description": "Voight API key (Agents: operate or Agents: full)", "password": true }
  ],
  "servers": {
    "voight-agents": {
      "command": "npx",
      "args": ["-y", "@voightxyz/agents-mcp"],
      "env": { "VOIGHT_API_KEY": "${input:voight-api-key}" }
    }
  }
}

~/.codex/config.toml:

[mcp_servers.voight_agents]
command = "npx"
args = ["-y", "@voightxyz/agents-mcp"]
startup_timeout_sec = 30

[mcp_servers.voight_agents.env]
VOIGHT_API_KEY = "vk_your_key"

claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\):

{
  "mcpServers": {
    "voight-agents": {
      "command": "npx",
      "args": ["-y", "@voightxyz/agents-mcp"],
      "env": { "VOIGHT_API_KEY": "vk_your_key" }
    }
  }
}

~/.gemini/settings.json. Gemini CLI does not pass variables named like *KEY* from your shell, so the key has to be set in the env block:

{
  "mcpServers": {
    "voight-agents": {
      "command": "npx",
      "args": ["-y", "@voightxyz/agents-mcp"],
      "env": { "VOIGHT_API_KEY": "vk_your_key" }
    }
  }
}

3. Ask. "List my Voight agents" is a good first message.


Tools

| Tool | What it does | Key | Spends | | --- | --- | --- | --- | | list_agents | Agents on the account: id, state, hosting, model, days left | operate | No | | get_agent | One agent in detail: channels, expiry, on-chain identity, Nosana job, persona | operate | No | | get_credits | Credit balance, plan and the price of one deploy | operate | No | | get_agent_usage | Turns, tokens and cost for one agent or the whole account | operate | No | | list_tasks | Tasks of an agent, with the result of the last run | operate | No | | list_gpu_markets | GPU markets with hourly price and live availability | operate | No | | chat_with_agent | Sends one message and waits for the reply | operate | Inference | | get_reply | Collects the reply of a turn that was still running | operate | No | | message_agents | Sends instructions to up to 10 agents at once | operate | Inference | | get_replies | Collects several pending replies in one call | operate | No | | wake_agent | Starts the GPU of a stopped Nosana agent | operate | Can bill a GPU hour | | wait_for_agent | Waits for a starting agent, and says when to stop waiting | operate | No | | quote_agent_deploy | What a deploy would cost, and whether the account may do it | full | No | | deploy_agent | Deploys an agent on Voight cloud or a Nosana GPU | full | Yes | | quote_agent_renewal | What a renewal would cost, and whether it is due | full | No | | renew_agent | Extends hosting by another period | full | Yes | | create_task / update_task / delete_task | Work an agent runs on its own: once, daily or weekly | full | Each run is a normal turn | | delete_agent | Permanently deletes an agent | full | No |

Run with --read-only (or VOIGHT_MCP_READ_ONLY=1) to expose only tools that read.

Deploying

Spending always takes two steps, in two different tools, so your client asks for permission at the moment money moves:

  1. quote_agent_deploy answers what it costs, your balance, and whether the account may deploy it. It spends nothing.
  2. deploy_agent repeats the quoted amounts. If the real price is higher, the deploy is refused and nothing is charged.
  3. wait_for_agent follows the start (about a minute on Voight cloud, about four on a GPU) and says when to stop waiting instead of polling forever.

Every deploy and renewal made through this server is charged, on every account. Free and trial agents are claimed on the web. Asking twice for the same deploy returns the agent that is already starting instead of a second one and a second charge (allow_duplicate deploys identical agents on purpose). Repeating the quoted cost is there for you to see it: it is not what protects the account. The limits below are, and they live on Voight's side.

Limits

Per account, across all its keys, enforced by the API:

| Limit | Value | | --- | --- | | Deploys | 10 per 24 hours | | Renewals | 10 per 24 hours, and only in the 7 days before an agent expires | | Agent deletes | 10 per 24 hours | | Task creates, edits and deletes | 30 per 24 hours | | Live agents deployed through keys | 15, of which 3 on GPU | | Tasks per agent | 50 |

Orchestrating several agents

message_agents sends one instruction to many agents, or a different one to each, and waits once for all of them (about 45 seconds). Agents still working come back as running with a turn_ref; get_replies collects them. Nothing is sent to an agent that is busy or not ready, so a message is never queued behind another or lost. Long replies are shortened to fit your client; get_reply returns the full text of any of them.

How chat works

An agent can work on a single message for minutes: it searches, runs tools and writes files before it answers. MCP clients give a tool call much less time than that (60 seconds in several of them). So chat_with_agent waits up to about 50 seconds:

  • If the reply is ready, you get it.
  • If not, you get status: "running", a turn_ref and what the agent is doing right now. get_reply with that turn_ref collects the answer, and can be called as many times as needed.

A message is never sent twice: while a turn is running, a new message to the same agent is refused. The conversation continues across calls; pass new_conversation: true to start over.

Turns are kept in the memory of this process. If your client restarts the server while an agent is working, the turn_ref is lost. The agent still finishes on its side.

GPU agents

GPU hosting on Nosana is invite-only for now: deploying on a GPU works for accounts that were invited, and everyone can deploy on Voight cloud.

Agents hosted on GPUs stop their GPU when the paid hours end, and show up as gpu_stopped. wake_agent starts the GPU again, which takes a few minutes and can bill one GPU hour. Sending a chat message to a stopped agent also starts it, but that message is not delivered: wait until wait_for_agent says ready, then send it. message_agents skips stopped GPU agents unless you pass wake_stopped: true.

Tasks

A task is an instruction the agent runs on its own: once, every day or every week (times are UTC). Each run is a normal agent turn.

  • On an agent connected to GitHub, LinkedIn or X, a task created from here is saved paused, and a person enables it in the dashboard. A key can pause such an agent's tasks, and edit a task it created that never ran, but it can never enable one or change one that a person approved. Scheduled runs act without anyone watching, so arming them is a human decision.
  • Revoking a key does not stop the tasks it scheduled. Pause or delete them from here or from the dashboard.

Deleting

delete_agent is permanent: the agent, its memory and its tasks are gone, and a used period is not refunded. It needs the agent's exact name, and it only works on agents that were deployed with an API key. Agents you built in the dashboard, with their connectors, bot and on-chain identity, cannot be deleted from any MCP session. A GPU deploy that has not started yet is refunded when deleted; a cloud agent that is still starting cannot be deleted until it is up.


Security and privacy

  • Scoped keys. An Agents: operate key cannot deploy, renew, schedule or delete. An Agents: full key can, expires after 90 days, and is bounded by the limits above. Neither can touch billing, top up, or create, list or revoke API keys. Revoke a key at any time in Settings.
  • The rules live on the server. Charging, limits, duplicate detection, what a key may delete and the task rules are enforced by the Voight API. Nothing in this package is a security boundary: a model can repeat any confirmation it is asked for.
  • The key goes to one place. Requests are only sent to https://api.voight.xyz. If VOIGHT_ENDPOINT points anywhere else (other than a localhost dev server) the server refuses to start, so a project config cannot redirect your key to another host.
  • Stored text is fenced. Agents read the open web, inboxes and repos, so their replies can contain text written by a third party, and personas and task instructions can now be written through this server. All of it (replies, task results, personas, task instructions) comes back inside a block marked as untrusted content, with a random marker per call, and the model is told to treat it as data. This server never chains tool calls on its own.
  • Bounded output. Results are capped at about 24,000 characters and say so when something was cut.
  • What leaves your machine. The messages you send to an agent go to Voight, as they would from the dashboard. What comes back (agent names, personas, replies, task results, usage numbers) is handed to your MCP client and therefore to the model provider behind it. Account email and wallet are never returned.
  • No telemetry. The package reads no files and sends nothing anywhere except the API calls above. Logs go to stderr.
  • No transitive installs. The published bin is a single bundled file with zero runtime dependencies. Pin a version (@voightxyz/[email protected]) if you want upgrades to be explicit.

Environment

| Variable | Required | Description | | --- | --- | --- | | VOIGHT_API_KEY | Yes | An Agents: operate or Agents: full key. | | VOIGHT_ENDPOINT | No | Defaults to https://api.voight.xyz. Only that host or localhost is accepted. | | VOIGHT_MCP_READ_ONLY | No | 1 is the same as --read-only. |

Not in this version

Editing an agent's persona or model, retrying a failed deploy, connectors, attachments and claim codes are not exposed. Topping up credits and managing API keys will stay in the dashboard.


Local development

npm install
npm run type-check
npm test
npm run build
npm run smoke                      # lists tools through the built binary
VOIGHT_API_KEY=vk_... npm run smoke  # also reads the account; never chats, wakes or deploys
src/
  cli.ts       entry point (stdio)
  config.ts    env and flags, endpoint allowlist
  api.ts       HTTP client and error messages
  chat.ts      chat turns with a bounded wait
  format.ts    compact views, size cap, untrusted fence
  server.ts    read and chat tools
  tools-provision.ts   quotes, deploy, wait, renew, delete, tasks
  tools-fanout.ts      message_agents, get_replies

Inspect it with the MCP Inspector: npx @modelcontextprotocol/inspector node dist/cli.js.

License

Apache 2.0 © Voight. See LICENSE.