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

@byteder/mcp

v0.5.0

Published

Byteder Cloud MCP server — connect Claude Desktop, Cursor, and other MCP clients to the Byteder API

Downloads

245

Readme

@byteder/mcp

Model Context Protocol server for the Byteder Cloud API. Lets Claude Desktop, Cursor, and other MCP clients manage your projects, instances, SSH keys, activity logs, billing, and product catalog over a single API key. Full feature parity with the REST API.

Install

No install needed — point your MCP client at npx:

npx -y @byteder/mcp

Or install globally:

npm install -g @byteder/mcp
byteder-mcp

Requires Node.js 18+.

Configure

The server reads two environment variables:

| Variable | Required | Default | Notes | |---|---|---|---| | BYTEDER_API_KEY | yes | — | Your bdr_live_… API key from dash.byteder.com → Settings → API Keys | | BYTEDER_API_URL | no | https://developer.byteder.com | Override for staging or self-hosted |

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %AppData%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "byteder": {
      "command": "npx",
      "args": ["-y", "@byteder/mcp"],
      "env": {
        "BYTEDER_API_KEY": "bdr_live_..."
      }
    }
  }
}

Restart Claude Desktop. The Byteder tools will appear in the tool picker.

Cursor

Add to ~/.cursor/mcp.json:

{
  "mcpServers": {
    "byteder": {
      "command": "npx",
      "args": ["-y", "@byteder/mcp"],
      "env": { "BYTEDER_API_KEY": "bdr_live_..." }
    }
  }
}

MCP Inspector (debugging)

BYTEDER_API_KEY=bdr_live_... npx @modelcontextprotocol/inspector npx -y @byteder/mcp

Tools

43 tools covering the full REST surface. Tools marked 🔒 confirm require a literal confirm: true argument — Claude will ask you to approve before sending.

Projects

| Tool | Purpose | |---|---| | list_projects | Every project this key can access | | get_project | One project by ID | | create_project | Create a PERSONAL or ORGANIZATION project | | update_project | Rename or edit organization details | | delete_project 🔒 | Soft-delete (fails if active instances remain) |

Instances — read & metadata

| Tool | Purpose | |---|---| | list_instances | All VMs in a project | | get_instance | One VM (incl. credentials) | | update_instance | Rename / re-describe (no VM impact) |

Instances — lifecycle

| Tool | Purpose | |---|---| | create_instance 🔒 | Provision a new VM (charges credits) | | start_instance | Power on | | stop_instance | Graceful ACPI shutdown | | restart_instance | Reboot | | force_stop_instance 🔒 | Hard kill — risk of FS corruption | | rebuild_instance 🔒 | Reinstall OS — wipes disk | | delete_instance 🔒 | Tear down | | upgrade_instance_plan 🔒 | Resize to a larger plan (charges + restart) |

Instances — VPC networking

| Tool | Purpose | |---|---| | attach_instance_vpc | Attach the instance to a VPC subnet (adds a private NIC + private IP). Pass reboot: true to apply now — 🔒 confirm required only when reboot: true | | detach_instance_vpc | Remove the instance's VPC private NIC. 🔒 confirm required only when reboot: true |

Instances — billing & credentials

| Tool | Purpose | |---|---| | change_billing_period | Schedule period change (next cycle) | | cancel_pending_billing_period | Revert a scheduled change | | update_instance_ssh_key | Replace SSH key (restarts VM) | | update_instance_password | Reset root password (restarts VM) |

SSH keys (account-scoped)

| Tool | Purpose | |---|---| | list_ssh_keys | All saved keys | | add_ssh_key | Save a new public key | | delete_ssh_key | Remove a saved key (does not affect deployed VMs) |

VPC (private networking)

| Tool | Purpose | |---|---| | list_vpcs | All VPCs in a project | | get_vpc | One VPC (subnets, attached instances, peerings) | | create_vpc 🔒 | Provision a VPC (SDN VLAN + VNet + subnet) | | delete_vpc 🔒 | Delete a VPC (fails if instances attached) | | list_vpc_subnets | Subnets in a VPC | | create_vpc_subnet | Add a subnet (CIDR within the VPC range) | | delete_vpc_subnet 🔒 | Delete a subnet (fails if instances attached) | | list_vpc_peerings | Peerings for a VPC | | request_vpc_peering | Request peering with another VPC | | accept_vpc_peering | Accept an incoming peering request | | reject_vpc_peering | Reject an incoming peering request | | delete_vpc_peering 🔒 | Remove a peering |

To connect an existing instance to a VPC, use attach_instance_vpc (above). VPC selection at creation time is also available via the vpc_id / subnet_id fields on create_instance.

Catalog (no API key required for read)

| Tool | Purpose | |---|---| | list_catalog_regions | Available deploy regions | | list_catalog_tiers | Service tiers | | list_catalog_datacenters | Datacenters in a region (codenames for create_instance) | | list_catalog_plans | Server plans + pricing per period | | list_catalog_os | OS images |

Audit

| Tool | Purpose | |---|---| | get_recent_logs | Activity log (cursor-paginated) |

After creating an instance

Provisioning is asynchronous. create_instance returns immediately with status CREATING; the instance becomes RUNNING roughly a minute later, once the sync job observes it. Lifecycle calls — upgrade_instance_plan, resize_instance, convert_to_custom — are rejected while it is still CREATING, so poll get_instance until the status flips rather than acting straight after create.

If it reports RUNNING but you cannot reach it — SSH refused, no ping — the guest occasionally boots without working networking. Call restart_instance once and wait for it to come back; that clears it.

If it is still unreachable after that single restart, the problem is not the boot. Stop and report it instead of restarting in a loop — repeated reboots will not fix a networking or placement fault, and each one costs the customer more downtime on a VM they are already being billed for.

Safety: the confirm: true gate

Destructive tools (delete, rebuild, force-stop, create-instance, upgrade-plan, create/delete-VPC, delete-subnet/peering) require a literal confirm: true field. A few tools (attach_instance_vpc, detach_instance_vpc) require it only when reboot: true, since the reboot causes downtime. The model can't satisfy this from a vague natural-language request — it has to explicitly include confirm: true in the tool call, which Claude Desktop surfaces in its approval prompt. This protects against:

  • Accidental destructive calls from ambiguous prompts
  • Prompt injection attacks asking the agent to "delete all my VMs"
  • Tool-call retries on transient failures double-firing

If a destructive call fails with Refusing to … : 'confirm' must be exactly true, that's the gate working as designed.

Permissions

The server uses your API key's existing scopes. If a tool returns "API key requires scope X", grant the missing scope to the key in the dashboard.

License

MIT