Reported issues for printr
Pod holds 20 of 31 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.
Back to printr.
Most discussed
feat(mcp): remote MCP server hosted on Cloudflare Workers
Motivation
@printr/mcp today is stdio-only — every user installs it locally via the CLI (bunx @printr/cli setup). That terminal-first flow is the biggest drop-off between "interested" and "agent connected" (see #113). A remote MCP server hosted on Cloudflare Workers gives clients a plain URL to connect to — no local install, no runtime, no keystore on the user's box.
This is now unblocked: Epic A (#103) made @printr/sdk Workers-ready, so the core runs on a V8 isolate without v
Read the thread · 2026-06-19 · open · 5 comments
Epic A: SDK Workers-ready
Goal
@printr/sdk evaluates and runs cleanly on Cloudflare Workers / edge runtimes without vendoring.
Why bundle
All four sub-issues share one acceptance gate: "a Worker importing the SDK barrel evaluates without throwing." Same package.json exports surgery, same Worker eval smoke test, same release. Landing them piecemeal leaves Workers consumers half-broken between releases.
Sub-issues
- #96 — lazy-load
sharp+node:fsinimage.ts - #97 — drop
createRequires
Read the thread · 2026-05-25 · closed · 2 comments
feat(mcp): publish Printr skill manifest for agent composition
Motivation
Bankr publishes a skills repo so any agent runtime can pull in their capabilities as a plug-and-play skill. We already have packages/cli/skills/printr/SKILL.md — this issue is about formalizing and publishing it so other agents (and our own users) can install Printr capabilities the same way.
The README already advertises npx skills add PrintrFi/printr-mcp, but the skill itself isn't surfaced as a first-class artifact alongside the MCP se
Read the thread · 2026-05-14 · closed · outside contributor · 2 comments
docs: update gitbook for current MCP/SDK + cross-link with the dev docs
Context
While aligning the gh-pages dev docs voice to the gitbook (https://printr.gitbook.io/printr-docs/), a few gitbook pages were found out of date vs the current printr-mcp repo. Queueing a pass to fix them and to cross-link the gitbook (product/conceptual) with the gh-pages dev docs (https://printrfi.github.io/printr-mcp/, MCP tool + SDK reference).
Stale items found (verify + fix)
- CLI command is wrong.
for-agents/printr-mcp.md+for-agents/README.mdshow `bunx
Read the thread · 2026-06-20 · closed · 1 comment
setupBareExtension: generic factory for proto/openapi wrappers
Idea
Generic factory that takes a class/ctor and returns a mapped-type object with uncapitalized method names. Collapses N near-identical wrapper modules (each generated proto/openapi service file) into one helper invocation.
export function setupBareExtension<T extends new (...a: any[]) => any>(Ctor: T): UncapitalizeKeys<InstanceType<T>> { ... }
Why
- Pairs with #83 (template-literal renaming) for ergonomic proto APIs
- Smaller surface in
staking-api.ts/fees-api.tsonce
Read the thread · 2026-05-17 · closed · 1 comment
Template-literal method renaming for proto wrappers
Idea
Strip Request/Msg/Response suffixes at the type level for generated proto wrappers in fees-api.ts and staking-api.ts:
type SimplifyRequestMethod<T extends string> =
T extends `${infer Base}Request` ? Uncapitalize<Base> : T;
type KeepOnlySimplifiedRequestMethods<T> = {
[K in keyof T as K extends `${string}Request` ? SimplifyRequestMethod<K & string> : never]: T[K];
};
Lets the public surface expose .claimRewards() / .createStakePosition() etc. even when the
Read the thread · 2026-05-17 · closed · 1 comment
feat(sdk,mcp): use CAIP-10 token IDs for printr_transfer_token / executeTokenTransfer
Context
Surfaced in Copilot review on #56. The printr_transfer_token MCP tool and the SDK executeTokenTransfer dispatcher both accept an unqualified token_address and infer the execution chain from the recipient's CAIP-10 address. A caller who pastes a token contract from another chain (very common — many tokens deploy to multiple EVM chains under different addresses) will silently execute against whatever code or EOA happens to live at that address on the destination chain.
`printr_g
Read the thread · 2026-05-05 · closed · 1 comment
Published tarball 0.16.1 ships certs/key.pem (private key) via the "files" allowlist
Hello,
A heads-up from outside the project rather than a bug in the code.
The published tarball for @printr/mcp@0.16.1 contains certs/key.pem (227 bytes) alongside
certs/fullchain.pem (4108 bytes). A 227-byte PEM next to a full chain is the shape of a TLS
private key, not a public one. It is in the current latest version, so it is in every copy
installed since release; npm pack @printr/mcp@0.16.1 reproduces it in seconds.
This is not the usual packaging accident — `package.jso
Read the thread · 2026-08-27 · open · external user · 0 comments
Most recent
feat(docs): generate SDK API reference (TSDoc → MDX, like onrails)
Motivation
#57 backfilled TSDoc across every public @printr/sdk export and MCP register*Tool. Now that the source carries structured doc comments, we can surface a proper API reference section in the docs site — the sdk.mdx page is currently a hand-written high-level map, not per-function reference.
Target shape: a dedicated API section like ~/dev/onrails (apps/docs/content/docs/api/{result,maybe,pattern}.mdx) — rich per-primitive pages with twoslash examples.
Approach
Read the thread · 2026-06-19 · open · 0 comments
feat(sdk,cli): extract MCP client table to @printr/sdk for web reuse
Motivation
The only way to install the Printr MCP server today is the CLI (bunx @printr/cli setup --client cursor). This is a terminal-first flow that most app users never complete — it's the single biggest drop-off between "user is in the app" and "user has an agent connected".
We want a "Connect your agent" button in the main app (printr/web) that renders the per-client MCP config (copy-to-clipboard + deep links) directly in the UI, so install moves into the product surface where
Read the thread · 2026-06-02 · open · 0 comments
Epic C: Agent trading UX
Goal
Agents using @printr/mcp can swap, buy, sell, and bridge — not just launch.
Why bundle
Both sub-issues:
- Need the signer primitive from Epic B / #100
- Ship MCP tools + SDK adapter pair
- Require provider choice + e2e fork tests
- Share fee-routing / quote-flow architecture decisions
Landing them as one epic forces consistent UX (quote-then-confirm vs one-shot, fee model, status polling).
Sub-issues
- #62 — trading tools: swap, buy, sell by ticker
- #63 — cross-cha
Read the thread · 2026-05-25 · open · 0 comments
Epic B: Shared SDK primitives
Goal
Lift two pieces of MCP-internal logic into shared SDK subpaths so every Printr client reuses them.
Why bundle
Both extract logic currently duplicated/inlined in MCP into @printr/sdk subpaths. Same review pattern (subpath export, interface, two reference impls, MCP swap). #100 unblocks Epic C signing flows.
Sub-issues
- #99 —
normalizeTokenId+ token-id regex exports in@printr/sdk/caip - #100 — extract signer primitive to
@printr/sdk/signer
Order
#99 first
Read the thread · 2026-05-25 · open · 0 comments
feat(sdk): processImageBytes(bytes, opts) helper
What to build
packages/sdk/src/image.ts exposes processImagePath (reads from disk via node:fs/promises). Add a parallel processImageBytes(bytes: Uint8Array, opts): ResultAsync<Uint8Array, ImageError> that takes raw bytes and returns processed bytes.
Use cases:
- Browsers / edge runtimes / Workers — no filesystem access
- HTTP servers that receive uploads in-memory (multipart, JSON-base64, etc.)
- Any consumer that has already fetched the image and shouldn't have to round-trip throu
Read the thread · 2026-05-25 · open · 0 comments
feat(sdk): lighter balance via direct JSON-RPC
What to build
packages/sdk/src/balance.ts currently pulls @solana/web3.js (~600KB minified) and viem for balance queries. For consumers that only need to read native or SPL balances, this is a heavy tax — especially on edge/Workers runtimes with bundle size limits.
Add a lighter variant that hits Solana / EVM JSON-RPC endpoints directly with fetch and parses responses with Zod. Same ResultAsync<Balance, BalanceError> shape so the substitution is mechanical.
Strategy:
- Keep the
Read the thread · 2026-05-25 · closed · 0 comments
feat(sdk): extract signer primitive to @printr/sdk/signer
What to build
Lift the browser-sign-by-URL session machinery out of packages/mcp/src/server/{sessions,app}.ts into a new @printr/sdk/signer subpath. Every Printr client that needs non-custodial signing — MCP today, future apps tomorrow — wants the same primitive: mint a signing session, hand the user a URL, let them sign in their wallet, poll/await completion.
This is a high-leverage upstream change: it lets a client orchestrate signing flows without ever holding a private key.
Shape (
Read the thread · 2026-05-25 · open · 0 comments
feat(sdk): normalizeTokenId + token-id regex exports
What to build
Every Printr client (MCP server, future apps) needs to accept user-typed token identifiers in any of these forms:
- Telecoin ID hex (e.g.
0xda97f29a4c137298ed138194b39b8b81eb7889018cd9ae4ab4a053fe0bfb7ed5) - EVM CAIP-10 (e.g.
eip155:8453:0x...) - Solana CAIP-10 (e.g.
solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:G6mNZ...) - Bare Solana mint base58 (e.g.
G6mNZN8o16QBcTqfuEx6FzjiWa94B1XWhfyDxjDibrrr)
…then normalize to a canonical form the API accepts. The MCP and any fut
Read the thread · 2026-05-25 · open · 0 comments
feat(sdk): types-only @printr/sdk/openapi entry
What to build
Add a ./openapi subpath export to @printr/sdk that re-exports only the generated OpenAPI types — paths, components, operations — from api.gen.d.ts. No runtime code.
Today, consumers wanting strict response types have to:
- Either import from
@printr/sdk/client, which now pulls runtime JS (broken on Workers; see #97), or - Define their own loose types and lose strict generated shapes, then cast at every API call site.
A types-only entry lets clients pull s
Read the thread · 2026-05-25 · closed · 0 comments
fix(sdk): emit Workers-friendly bundle, drop createRequire shim
What to build
Every module in @printr/sdk/dist/* currently starts with:
import { createRequire } from "node:module";
var __require = createRequire(import.meta.url);
This is Bun's bundler default for CJS interop with deps that ship CommonJS (e.g. neverthrow's .cjs.js). Cloudflare Workers throws on evaluation because createRequire(import.meta.url) receives undefined for import.meta.url in some configurations and because node:module isn't a Workers primitive even with
Read the thread · 2026-05-25 · closed · 0 comments
fix(sdk): lazy-load sharp + node:fs in image.ts
What to build
packages/sdk/src/image.ts statically imports sharp and node:fs/promises at module top level. The @printr/sdk barrel re-exports buildToken from token.ts, which re-exports image.ts transitively — so importing anything from the SDK barrel pulls those Node-only deps into the consumer bundle.
This kills the SDK in any non-Node runtime (Cloudflare Workers, browser, Deno-without-node-compat, edge functions).
Move the sharp and node:fs/promises imports inside th
Read the thread · 2026-05-25 · closed · 0 comments
Migrate signAndSubmit{Evm,Svm} to ResultAsync
Context
The public signers in `packages/sdk/src/evm.ts` and `packages/sdk/src/svm.ts` still return `Promise
Scope
SDK (signers + helpers):
- `signAndSubmitEvm` → `ResultAsync<EvmSubmitResult, Ev
Read the thread · 2026-05-18 · closed · 0 comments
The remaining reports are on the project's issue tracker.