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

@uthotyan/paperclip-adapter-minimax

v0.1.7

Published

Paperclip community adapter for MiniMax (MiniMax M2/M3, OpenAI-compatible) — pure HTTP, full tool loop, JWT auth, skill loading, cost tracking, repeat-call loop break.

Readme

paperclip-adapter-minimax

A community adapter that lets Paperclip agents talk to MiniMax's M2/M3 model family through MiniMax's OpenAI-compatible API.

This package implements Paperclip's adapter contract so you can register minimax as an adapter in a Paperclip deployment and point your agents at the MiniMax catalog (MiniMax-M2, MiniMax-M2.5, MiniMax-M2.7, MiniMax-M3).

It is not affiliated with MiniMax or Paperclip. The Paperclip project is at https://github.com/paperclipai/paperclip; the MiniMax project is at https://MiniMax.ai. This adapter is built against the publicly documented Paperclip adapter contract (modeled after the community paperclip-adapter-openrouter package).


What you get

  • Pure-HTTP TypeScript adapter — no CLI subprocess to spawn.
  • supportsLocalAgentJwt: true — the heartbeat dispatcher mints a per-run JWT and the adapter uses it to call Paperclip's REST API.
  • 8 built-in Paperclip tools: get_issue, list_issues, update_issue_status, add_comment, list_comments, create_sub_issue, hire_agent, request_approval.
  • Side-effect tools (hire_agent, request_approval) route through Paperclip's /api/companies/:id/approvals flow — no autonomous sidestepping.
  • Repeat-call loop break: aborts the run if the same tool is called 3x in a row with the same arguments (prevents infinite ping-pong).
  • Cost tracking: input/output tokens × configurable price-per-1M, aggregated per heartbeat.
  • Skill loading from <workspace>/skills, <workspace>/.paperclip/skills, the configured MINIMAX_SKILLS_DIR, or the package's bundled defaults.
  • Streaming support via MiniMax's stream_options.include_usage.
  • JSONL session persistence (for the live Working panel and replay).
  • doctor CLI for verifying your env + API key.

Install

Option A: monorepo (you have a Paperclip checkout)

# 1. Drop this folder next to your Paperclip source code
ls
# -> paperclip  paperclip-adapter-minimax  ...

cd paperclip-adapter-minimax
npm install
npm run build

# 2. Patch server/src/adapters/registry.ts — see REGISTRY_PATCHES.md

# 3. Restart Paperclip and select the "minimax" adapter in the UI

Option B: npm (scoped)

# Once published (or you can `npm pack` from this folder):
npm install @uthotyan/paperclip-adapter-minimax

Then patch the registry (see REGISTRY_PATCHES.md) — the import path is @uthotyan/paperclip-adapter-minimax.


Configuration

All configuration is via environment variables. Defaults are sensible for local dev with the free model.

| Env var | Required | Default | Notes | | --- | --- | --- | --- | | MINIMAX_API_KEY | ✅ | — | Your MiniMax API key. | | MINIMAX_BASE_URL | | https://api.minimax.chat/v1 | MiniMax's OpenAI-compatible base URL. | | MINIMAX_MODEL | | MiniMax-M3 | The model ID. See list below. | | MINIMAX_PRICE_INPUT_PER_1M | | 1 | USD per 1M input tokens. Override if MiniMax changes pricing. | | MINIMAX_PRICE_OUTPUT_PER_1M | | 3 | USD per 1M output tokens. | | MINIMAX_MAX_TURNS | | 8 | Hard cap on tool-loop iterations per heartbeat. | | MINIMAX_MAX_TOOL_CALLS_PER_TURN | | 8 | Cap on parallel tool calls in one assistant turn. | | MINIMAX_SKILLS_DIR | | — | Custom skills dir (overrides default discovery). | | MINIMAX_STREAM | | 1 | 0 to disable streaming. | | PAPERCLIP_API_KEY | ✅ | — | Static key OR pre-minted JWT. | | PAPERCLIP_API_URL | | http://localhost:3100 | Your Paperclip server URL. |

A copy-paste starter is in .env.example.

MiniMax model catalog

| Model ID | Notes | | --- | --- | | MiniMax-M3 | Latest; default in this adapter. | | MiniMax-M2.7 | Previous stable. | | MiniMax-M2.5 | Older stable. | | MiniMax-M2 | Earliest supported. | | MiniMax-M3:free | Free tier (rate-limited). |

If you have an OpenCode subscription that exposes MiniMax, you can also pass its opencode/minimax-m3-free-style ID as MINIMAX_MODEL — MiniMax's endpoint accepts any ID it serves, the adapter doesn't validate.


Doctor

After configuring .env, verify connectivity:

npx paperclip-adapter-minimax doctor

It checks: API key, base URL, Paperclip API key, MiniMax connection, lists a few model IDs from GET /v1/models.

You can also list models:

npx paperclip-adapter-minimax list

How a heartbeat runs

┌─────────────────────┐
│ Paperclip heartbeat │
│  dispatcher         │
└──────────┬──────────┘
           │ call adapter.run({ agent, run, issue })
           ▼
┌──────────────────────────────────┐
│  paperclip-adapter-minimax        │
│  (this package)                  │
│                                  │
│  1. Build system prompt          │
│  2. Resume session (if any)      │
│  3. Loop:                        │
│     a. chat.completions(...)     │
│     b. If tool_calls: execute    │
│        each, append results      │
│     c. If 3x same call: BREAK    │
│  4. Post final comment + status  │
│  5. Return { transcript,         │
│        cost, sessionState }      │
└──────────┬───────────────────────┘
           │ AdapterResult
           ▼
┌─────────────────────┐
│ Paperclip board UI  │
│  (transcript, cost) │
└─────────────────────┘

Registering in Paperclip

See REGISTRY_PATCHES.md for the exact diff to apply to server/src/adapters/registry.ts. The shape is:

import { minimaxAdapter } from "paperclip-adapter-minimax";

adapterRegistry.minimax = {
  ...minimaxAdapter.metadata,
  run: minimaxAdapter.run.bind(minimaxAdapter),
};

Security notes

  • This adapter makes outbound HTTPS to MiniMax (api.minimax.chat) and outbound HTTP(S) to your Paperclip server.
  • It does NOT execute arbitrary code, spawn a subprocess, or read arbitrary files. The only filesystem access is:
    • reads **/SKILL.md under the configured skillsDir
    • reads **/SKILL.md under <workspacePath>/skills and <workspacePath>/.paperclip/skills
    • writes JSONL transcripts to os.tmpdir()/paperclip-adapter-minimax/
  • The MiniMax API key never leaves the process; it's only used as a Bearer token on outbound calls to MiniMax.
  • Approval-gated tools go through Paperclip's /api/companies/:id/approvals endpoint. A human must approve in the board UI before the new agent materializes or spend happens.
  • If you don't want side effects at all, set MINIMAX_APPROVAL_GATED=0 in the agent's environment — the adapter will still POST to /approvals but the row will be auto-acknowledged in your Paperclip workflow policy (depends on your setup).

Troubleshooting

| Symptom | Likely cause | | --- | --- | | doctor says minimax connection: ❌ | MINIMAX_API_KEY missing, or MiniMax endpoint unreachable from this network. | | Tools never fire | MINIMAX_MAX_TURNS too low, or the model is returning plain text. Check the transcript in the Working panel. | | errorMessage: "repeat_call_loop_break" | Your prompt is sending the model in circles. Tighten the task or raise MINIMAX_MAX_TURNS carefully. | | Comments appear in the wrong place | The agent's PAPERCLIP_API_URL is pointing at a different company than the agent record. | | costUsd: 0 | Pricing vars not set; defaults are $1/$3. Override if your model is different. | | MiniMax rejects tools | Some old model versions don't support function-calling. Use MiniMax-M2.7 or later. |


Development

npm install
npm run typecheck    # tsc --noEmit
npm test             # vitest
npm run build        # tsc → dist/

Run the CLI locally:

MINIMAX_API_KEY=... npm run dev -- doctor

License

MIT. See LICENSE.

Disclaimer

This is an independent community project. Not affiliated with, endorsed by, or sponsored by MiniMax, Paperclip, or any of their parent companies. Use at your own risk; review the code before pointing production agents at it.