Toolaby Wall

Build with an agent

Give a coding agent what it needs to build and sell an extension on the Wall.

A coding agent, such as Claude Code, Codex, Cursor or Copilot, can build an extension that sells on the Wall. Three things give it what it needs: the files toolaby create and upgrade write for it, the Toolaby MCP server, and toolaby check.

This page covers each, then a first session from an empty folder.

Before you begin

  • A workspace on the Wall, and Node.js 18 or later.
  • The command line signed in once: npx -y toolaby@latest login. The MCP server acts with that session.

The files agents read

toolaby create and toolaby upgrade write these beside the extension:

FileForWritten
TOOLABY.mdEvery agent. The files the Wall owns, gate() and the paywall, this tool's features and plans, testing, shipping, and the rules.Every time. upgrade rewrites it with the tool as the Wall has it then.
.claude/skills/toolaby/SKILL.mdClaude Code's skill for the Wall: adding a paid feature, checking, shipping.Every time.
AGENTS.mdEvery agent reads it first. It points at TOOLABY.md.Only when the project has none.
CLAUDE.mdClaude Code. It reads AGENTS.md.Only when the project has none.

A project with its own AGENTS.md keeps it. wire then prints the line to add to it.

The MCP server

toolaby mcp is an MCP server on stdio. It acts on your tools with the stored session, on Test unless started with --live.

For Claude Code:

claude mcp add toolaby -- npx -y toolaby@latest mcp

For other clients, the server is the command npx -y toolaby@latest mcp.

ToolDoes
toolaby_whoamiThe signed-in developer and their workspaces.
toolaby_list_toolsYour tools, with the ids the other tools take.
toolaby_get_toolOne tool: what the Free plan holds, features, plans and what each unlocks, the tool key, the extension's id, whether a copy has checked in, the builds in use.
toolaby_create_toolA new tool.
toolaby_set_accessWhat the Free plan holds: open, free_uses with a number, or paid; and whether an account comes first. A feature a plan sells is refused on any of them.
toolaby_add_planA plan: a lifetime price or a subscription, as a Price on your Stripe account. It answers with the plan's id (the first plan's is default) and its name as buyers see it, like Pro · Lifetime.
toolaby_set_featuresThe tool's whole list of features, and which plans unlock each. Add the plans first.
toolaby_grantAccess without paying. An address with no account gets one; the grant applies when that person signs in to the extension.
toolaby_docsThese docs as Markdown: the index, or one page.

Every change goes through the same checks as the dashboard. A member whose role cannot change a tool is refused. The tools say which only read and which change your workspace, in MCP's annotations, and each tool that changes something says so in its description: a client that asks before a change can ask before these.

The tool key carries what the Free plan holds and the kind of plan sold. When toolaby_set_access or toolaby_add_plan changes it, the answer says keyChanged and names the command that writes the new one: npx -y toolaby@latest upgrade <tool-id>.

toolaby check

npx -y toolaby@latest check in the extension's folder, or npx -y toolaby@latest check <folder>:

ChecksFails when
The Wall's filestoolaby.js or toolaby.config.js is missing.
The tool keyIt is missing, or the Wall does not sell the tool it names. A key whose Wall is not an https address, or one on this machine, is refused before anything is asked of it.
The manifestIt lacks a permission or host permission the Wall needs. A manifest without the key is reported.
The clientNever: an older toolaby.js is reported, with upgrade to replace it.
Feature keysThe code calls gate({ feature }) or has() with a key the tool does not have. Every buyer would be refused. Comments are skipped.
The paywall's pageNever: code that calls showPaywall() in an extension without the Wall's page for its popup or side panel is reported.
PlansNever: a feature no plan unlocks, or nothing to buy, is reported.
Checked inNever: a tool no copy has checked in to is reported.
The key is currentNever: a key older than the Wall's, after a change to the Free plan, the plans or the signing key, is reported.

--browser also loads the extension in Chromium, asks its background a question, and opens its popup and side panel in a tab. A background whose code threw while loading does not answer; a page whose script throws fails. It needs Playwright in the project: npm i -D playwright && npx playwright install chromium, after npm init -y in a folder with no package.json.

It exits with 1 when something fails, so an agent, or CI, can stop on it.

The docs for agents

  • /llms.txt: every page, with its Markdown address and what it covers.
  • /llms-full.txt: every page in one file.
  • Any page as Markdown: its address with .md, like /docs/gating.md.

By address, over MCP

For a client that connects to an MCP server by its address, such as a Claude or ChatGPT connector, the docs are also an MCP server at https://toolaby.app/api/mcp (Streamable HTTP). It has one tool, toolaby_docs, which answers the index or one page. It reads nothing but these docs, so it asks for no sign-in and holds no key. Where a client asks how to authenticate, choose none; if it insists on a token, any text will do, since nothing checks it.

The tools that read and change your tools stay with toolaby mcp on your machine, under your own sign-in.

A first session

  1. In the dashboard, or with toolaby_create_tool, make the tool.
  2. npx -y toolaby@latest create <tool-id> makes the extension, with the files above.
  3. Ask the agent for the extension, in one sentence: "Count the words on the page in the popup; exporting the counts as CSV is Pro."
  4. The agent adds a plan and the export feature with the MCP server, writes the code behind gate({ feature: 'export' }), and runs npx -y toolaby@latest check.
  5. Load it unpacked at chrome://extensions and try it. On Test, Buy takes the card 4242 4242 4242 4242, and the extension unlocks when the success page opens. An agent cannot pay or sign in by itself: this step is yours.
  6. To ship: Ship to the Chrome Web Store.

See also

On this page