Web-app store (pwamart.com)
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Re-check the app's homepage for a link back to its pwamart listing now (the badge). Verified earns the ✓ and a followed link. Needs an API key for an app you publish.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http pwamart https://pwamart.com/mcp
Re-check the app's homepage for a link back to its pwamart listing now (the badge). Verified earns the ✓ and a followed link. Needs an API key for an app you publish.
| Argument | Type | Description |
|---|---|---|
| slug* | string |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string"
}
},
"additionalProperties": false
}Comment on an app's page, or reply to a comment (parent = its id; one level). 10+ characters earns 2 karma (up to 10 a day). Rate limited. Needs an API key.
| Argument | Type | Description |
|---|---|---|
| slug* | string | |
| text* | string | |
| parent | string | comment id to reply to |
{
"type": "object",
"required": [
"slug",
"text"
],
"properties": {
"slug": {
"type": "string"
},
"text": {
"type": "string"
},
"parent": {
"type": "string",
"description": "comment id to reply to"
}
},
"additionalProperties": false
}Make a single-use pwamart invite link for a new account (3 per account, 30 days). When the invitee confirms their account, both of you get Pro days. The link is returned once. Needs an API key.
| Argument | Type | Description |
|---|---|---|
| note | string | who it is for (only you see it) |
{
"type": "object",
"properties": {
"note": {
"type": "string",
"description": "who it is for (only you see it)"
}
},
"additionalProperties": false
}Get a published app featured for $19: 7 days on the pwamart home page and a slot in the next newsletter. Returns a CoinPay crypto checkout URL for a human to pay; with credit: true it spends a free Featured week earned with karma instead (no payment). Needs an API key.
| Argument | Type | Description |
|---|---|---|
| slug* | string | |
| credit | boolean | spend a karma credit (every 500 karma earns one) |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string"
},
"credit": {
"type": "boolean",
"description": "spend a karma credit (every 500 karma earns one)"
}
},
"additionalProperties": false
}Read a website and suggest a publisher name, logo and bio (from its manifest and page; the bio is written by AI only when the site has no description). Saves only when save is true. Needs an API key.
| Argument | Type | Description |
|---|---|---|
| url | string | website to read; defaults to the publisher website |
| save | boolean | |
| slug* | string | publisher slug |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"url": {
"type": "string",
"description": "website to read; defaults to the publisher website"
},
"save": {
"type": "boolean"
},
"slug": {
"type": "string",
"description": "publisher slug"
}
},
"additionalProperties": false
}Get notified when an app updates, or when a publisher ships a new app or update. Needs an API key or `pwamart login` (or pass an email for a confirmation link).
| Argument | Type | Description |
|---|---|---|
| kind | string | |
| slug* | string | |
| string |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"kind": {
"enum": [
"app",
"publisher"
],
"type": "string"
},
"slug": {
"type": "string"
},
"email": {
"type": "string"
}
},
"additionalProperties": false
}Full details of one app by slug: description, screenshots, installability checks, publisher and install instructions for every platform.
| Argument | Type | Description |
|---|---|---|
| slug* | string |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string"
}
},
"additionalProperties": false
}The live "Get it on pwamart" badge (rating + installs) for a listing, as HTML and Markdown snippets to paste on the app's site, plus whether its homepage links back (the ✓ and a followed link). Pass slug, or site (a homepage URL) to find which listing a site is.
| Argument | Type | Description |
|---|---|---|
| site | string | a homepage URL, instead of slug |
| slug | string |
{
"type": "object",
"properties": {
"site": {
"type": "string",
"description": "a homepage URL, instead of slug"
},
"slug": {
"type": "string"
}
},
"additionalProperties": false
}One collection's apps, with each app's surfaces (CLI install command, MCP endpoint, API base) and the collection's one-command installs.
| Argument | Type | Description |
|---|---|---|
| slug* | string |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string"
}
},
"additionalProperties": false
}What's new in an app: its releases (published by the developer or detected from manifest changes), newest first.
| Argument | Type | Description |
|---|---|---|
| slug* | string |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string"
}
},
"additionalProperties": false
}How to install an app on a given platform, plus the URL to open. An agent with a shell can run the returned command; otherwise show the steps to the user.
| Argument | Type | Description |
|---|---|---|
| slug* | string | |
| platform | string |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string"
},
"platform": {
"enum": [
"ios",
"android",
"desktop",
"linux",
"macos",
"windows",
"tron"
],
"type": "string"
}
},
"additionalProperties": false
}The public karma leaderboard: members ranked by karma earned upvoting, reviewing, commenting on, sharing and publishing apps. Falls back to all time when the period is empty.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| period | string |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"period": {
"enum": [
"week",
"month",
"all"
],
"type": "string"
}
},
"additionalProperties": false
}Every category with how many apps it has.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Collections of apps for agentic workflows (coding, payments, ops, growth, research, talking to humans; every MCP server, CLI or API). Each has one command that installs every CLI in it and one MCP config for every server.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}An app's comments with their replies, each author's name and karma.
| Argument | Type | Description |
|---|---|---|
| slug* | string |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string"
}
},
"additionalProperties": false
}Your pwamart invites: how many are left, each one's state, how many were accepted, and your open ?ref= link. Needs an API key.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Your pwamart karma: total, this week, rank, badges, free Featured week credits, karma to the next one, recent history and how to earn more. Needs an API key or `pwamart login`.
| Argument | Type | Description |
|---|---|---|
| limit | integer | history rows |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "history rows"
}
},
"additionalProperties": false
}Publish a verified, installable app to the store. Needs an API key.
| Argument | Type | Description |
|---|---|---|
| slug* | string |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string"
}
},
"additionalProperties": false
}Redeem a pwamart credit code (PM-XXXX-XXXX-XXXX-XXXX) for days of the Pro plan, added after any time the account already has. Each code works once per account. Needs an API key or `pwamart login`.
| Argument | Type | Description |
|---|---|---|
| code* | string |
{
"type": "object",
"required": [
"code"
],
"properties": {
"code": {
"type": "string"
}
},
"additionalProperties": false
}Rate an app 1 to 5 with an optional review (30+ characters earns 5 karma, once per app, not your own). Posting again updates your review. Needs an API key.
| Argument | Type | Description |
|---|---|---|
| slug* | string | |
| text | string | |
| rating* | integer |
{
"type": "object",
"required": [
"slug",
"rating"
],
"properties": {
"slug": {
"type": "string"
},
"text": {
"type": "string"
},
"rating": {
"type": "integer",
"maximum": 5,
"minimum": 1
}
},
"additionalProperties": false
}Search the pwamart catalog of installable web apps (PWAs). Returns name, slug, summary, publisher, rating, installs and the URL to open.
| Argument | Type | Description |
|---|---|---|
| sort | string | votes = most upvoted |
| limit | integer | |
| query | string | free text, e.g. "markdown notes" |
| feature | string | only apps with this detected feature; offline = its service worker answers from a cache |
| offline | boolean | shorthand for feature: "offline" |
| surface | string | only apps that are also a CLI (curl | sh installer), an HTTP API, an MCP server or a native desktop app |
| category | string | category slug from list_categories |
{
"type": "object",
"properties": {
"sort": {
"enum": [
"top",
"votes",
"new",
"rating",
"name"
],
"type": "string",
"description": "votes = most upvoted"
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1
},
"query": {
"type": "string",
"description": "free text, e.g. \"markdown notes\""
},
"feature": {
"enum": [
"offline"
],
"type": "string",
"description": "only apps with this detected feature; offline = its service worker answers from a cache"
},
"offline": {
"type": "boolean",
"description": "shorthand for feature: \"offline\""
},
"surface": {
"enum": [
"cli",
"api",
"mcp",
"desktop"
],
"type": "string",
"description": "only apps that are also a CLI (curl | sh installer), an HTTP API, an MCP server or a native desktop app"
},
"category": {
"type": "string",
"description": "category slug from list_categories"
}
},
"additionalProperties": false
}List a PWA: inspects the URL and creates a draft under one of your publishers. Needs PWAMART_API_KEY (Bearer pm_live_...).
| Argument | Type | Description |
|---|---|---|
| url* | string | |
| slug | string | |
| category | string | |
| publisher* | string | publisher slug |
{
"type": "object",
"required": [
"url",
"publisher"
],
"properties": {
"url": {
"type": "string"
},
"slug": {
"type": "string"
},
"category": {
"type": "string"
},
"publisher": {
"type": "string",
"description": "publisher slug"
}
},
"additionalProperties": false
}Subscribe an email address to the pwamart newsletter. A confirmation email is sent; nothing else is until it is tapped.
| Argument | Type | Description |
|---|---|---|
| email* | string |
{
"type": "object",
"required": [
"email"
],
"properties": {
"email": {
"type": "string"
}
},
"additionalProperties": false
}Upvote an app (one per member per app; earns +1 karma, +1 to its owner, not on your own apps). remove: true takes the vote back. Needs an API key.
| Argument | Type | Description |
|---|---|---|
| slug* | string | |
| remove | boolean |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string"
},
"remove": {
"type": "boolean"
}
},
"additionalProperties": false
}Check the domain-ownership token for a draft app. Needs an API key.
| Argument | Type | Description |
|---|---|---|
| slug* | string |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string"
}
},
"additionalProperties": false
}Prove the publisher runs its website (manifest token, /.well-known file, meta tag or DNS TXT). Without the token in place, returns how to add it. Needs an API key.
| Argument | Type | Description |
|---|---|---|
| slug* | string |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string"
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 11, 2026.
A download piped straight into a shell, in text the model may follow.
Fix: Point to install docs instead of putting curl | sh in tool text.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.