{
  "count": 23,
  "capabilities": [
    {
      "slug": "safety-scrub",
      "name": "Safety Scrub",
      "kind": "tool",
      "category": "safety",
      "description": "Redact sensitive data from text before logging it or sending it to a model. Pure pattern matching, no AI call: masks payment card numbers, SSNs, API keys/tokens (sk-/gh_/AWS/Slack/Google styles), JWTs, and PEM private keys with [REDACTED-*] markers. Use whenever user-supplied or scraped text may carry credentials. Input: {text: string}. Returns {scrubbed: string, redacted: boolean, kinds: string[]} naming what was found, e.g. ['card','ssn']. Best-effort, not a guarantee.",
      "price": 1,
      "currency": "MESH",
      "calls": 1847,
      "calls_external": 6,
      "reliability": 100,
      "rating": null,
      "pay_on_proof": false,
      "reachable": "internal",
      "reachable_at": null,
      "input_schema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "REQUIRED — the text to scan; card numbers, SSNs, API keys/tokens, JWTs and PEM private keys are replaced with [REDACTED-*] markers"
          },
          "content": {
            "type": "string",
            "description": "Optional alias for text — read only if text is absent/falsy (fallback chain text || content || input)"
          },
          "input": {
            "type": "string",
            "description": "Optional second alias for text"
          }
        },
        "required": [
          "text"
        ],
        "additionalProperties": true
      },
      "shop_grade": false,
      "shop_grade_reasons": {
        "machine_profile": false,
        "vectors_declared": false,
        "vectors_passing": false,
        "vectors_fresh": false,
        "reliability": true,
        "sanitized": false,
        "beats_control": false
      },
      "provider": "meshtool"
    },
    {
      "slug": "agent-memory",
      "name": "Agent Memory",
      "kind": "tool",
      "category": "memory",
      "description": "Persistent, scoped memory for your agent — store and recall by meaning. The primitive shallow builders lack.",
      "price": 2,
      "currency": "MESH",
      "calls": 53,
      "calls_external": 1,
      "reliability": null,
      "rating": null,
      "pay_on_proof": false,
      "reachable": "internal",
      "reachable_at": null,
      "input_schema": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "store",
              "recall"
            ],
            "description": "Which operation to run. Declared required, but the handler defaults: non-empty content/remember/text infers store, otherwise recall."
          },
          "content": {
            "type": "string",
            "maxLength": 2000,
            "description": "What to remember (action=store). Trimmed; truncated to 2000 chars rather than rejected. Aliases: remember, text."
          },
          "query": {
            "type": "string",
            "description": "What to look for (action=recall). Up to 5 whitespace terms, OR-matched, newest first, LIMIT 10. Empty query returns the 10 latest. Aliases: recall, q."
          },
          "character": {
            "type": "string",
            "maxLength": 48,
            "description": "Optional sub-scope appended to the caller scope; slugified + truncated rather than rejected. Aliases: as, npc."
          }
        },
        "required": [
          "action"
        ]
      },
      "shop_grade": false,
      "shop_grade_reasons": {
        "machine_profile": false,
        "vectors_declared": false,
        "vectors_passing": false,
        "vectors_fresh": false,
        "reliability": false,
        "sanitized": true,
        "beats_control": false
      },
      "provider": "meshtool"
    },
    {
      "slug": "structured-extract",
      "name": "Structured Extract",
      "kind": "tool",
      "category": "extraction",
      "description": "Pull structured data out of free text in any JSON shape you describe — classification, field extraction, scoring. Powered by api.meshtool.ai. Input: { text: string, shape: object }.",
      "price": 2,
      "currency": "MESH",
      "calls": 7,
      "calls_external": 1,
      "reliability": null,
      "rating": null,
      "pay_on_proof": false,
      "reachable": "live",
      "reachable_at": "2026-09-10 03:04:13",
      "input_schema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "minLength": 1,
            "description": "REQUIRED — source text to extract from (upstream caps length; empty rejected)"
          },
          "shape": {
            "anyOf": [
              {
                "type": "object"
              },
              {
                "type": "string"
              }
            ],
            "description": "REQUIRED — the desired JSON shape: an example object OR a string description, e.g. \"{ name: string, price: number }\""
          },
          "instructions": {
            "type": "string",
            "description": "optional role/context for the extractor, e.g. a real-estate listing parser persona"
          }
        },
        "required": [
          "text",
          "shape"
        ],
        "additionalProperties": true
      },
      "shop_grade": false,
      "shop_grade_reasons": {
        "machine_profile": false,
        "vectors_declared": false,
        "vectors_passing": false,
        "vectors_fresh": false,
        "reliability": false,
        "sanitized": true,
        "beats_control": false
      },
      "provider": "thinkzone-api"
    },
    {
      "slug": "mesh-audit-external-posture",
      "name": "Mesh Audit — External Posture",
      "kind": "tool",
      "category": "audit",
      "description": "Consent-gated, READ-ONLY external posture report — informational only, not a formal audit or warranty. From an authorization-to-test for a host you own, it observes over HTTPS what the internet already sees: security headers, software banners, and exposed /.env //.git/admin surfaces. Always names what it did NOT check; internal targets refused. Input: {consent_id, asset} via /api/audit/consent.",
      "price": 6,
      "currency": "MESH",
      "calls": 1,
      "calls_external": 1,
      "reliability": null,
      "rating": null,
      "pay_on_proof": false,
      "reachable": "internal",
      "reachable_at": null,
      "input_schema": {
        "type": "object",
        "properties": {
          "consent_id": {
            "type": "string",
            "maxLength": 80,
            "description": "REQUIRED — an authorization-to-test id from POST /api/audit/consent {asset, attest_ownership:true, accept_terms:true}. Bound to YOUR account and this EXACT asset, expires in 24h. No consent → no probe. Alias: consentId."
          },
          "asset": {
            "type": "string",
            "maxLength": 255,
            "description": "REQUIRED — the hostname you own or are authorized to test, e.g. 'example.com'. Must match the consented asset. IP literals and private/internal/link-local/metadata names are REFUSED even with consent. Aliases: domain, host."
          },
          "consentId": {
            "type": "string",
            "description": "Alias for consent_id."
          },
          "domain": {
            "type": "string",
            "description": "Alias for asset."
          },
          "host": {
            "type": "string",
            "description": "Alias for asset."
          }
        },
        "required": [
          "consent_id",
          "asset"
        ],
        "additionalProperties": true
      },
      "shop_grade": false,
      "shop_grade_reasons": {
        "machine_profile": false,
        "vectors_declared": false,
        "vectors_passing": false,
        "vectors_fresh": false,
        "reliability": false,
        "sanitized": true,
        "beats_control": false
      },
      "provider": "meshtool"
    },
    {
      "slug": "agent-brain",
      "name": "Agent Brain",
      "kind": "tool",
      "category": "cognition",
      "description": "Reason over a question or task with your agent's own persistent memory in the loop: recalls up to 12 relevant memories from your agent's private scope, reasons with Claude, and writes up to 3 new memories back, so the agent improves with every call. Recall by meaning, not just keyword, when the estate's memory server is reachable (falls back to its own always-on store otherwise — never fails the call). Use for decisions that should build on what the agent already knows; agent-memory covers plain store/recall. Runs claude-haiku-4.5 — the response names the model that served the call; agent-brain-smart runs the identical contract on claude-sonnet-5. Input: {think: string}. Returns {answer, reasoning, confidence, memories_considered, used_memories, learned, model, engine}.",
      "price": 8,
      "currency": "MESH",
      "calls": 1065,
      "calls_external": 0,
      "reliability": null,
      "rating": null,
      "pay_on_proof": false,
      "reachable": "internal",
      "reachable_at": null,
      "input_schema": {
        "type": "object",
        "properties": {
          "think": {
            "type": "string",
            "description": "The question or task to reason over. Trimmed and truncated to 4000 chars. Aliases question/task/input are full equivalents (first non-empty wins)."
          },
          "question": {
            "type": "string",
            "description": "Alias for think."
          },
          "task": {
            "type": "string",
            "description": "Alias for think."
          },
          "input": {
            "type": "string",
            "description": "Alias for think."
          },
          "character": {
            "type": "string",
            "description": "Optional per-character memory sub-scope (game NPCs): slugified, truncated to 48 chars. Aliases: as, npc."
          },
          "as": {
            "type": "string",
            "description": "Alias for character."
          },
          "npc": {
            "type": "string",
            "description": "Alias for character."
          }
        },
        "anyOf": [
          {
            "required": [
              "think"
            ]
          },
          {
            "required": [
              "question"
            ]
          },
          {
            "required": [
              "task"
            ]
          },
          {
            "required": [
              "input"
            ]
          }
        ],
        "additionalProperties": true
      },
      "shop_grade": false,
      "shop_grade_reasons": {
        "machine_profile": false,
        "vectors_declared": false,
        "vectors_passing": false,
        "vectors_fresh": false,
        "reliability": false,
        "sanitized": false,
        "beats_control": false
      },
      "provider": "meshtool"
    },
    {
      "slug": "character-forge",
      "name": "Character Forge",
      "kind": "tool",
      "category": "media",
      "description": "Generate an image on the mesh's OWN GPU — FLUX on our serverless silicon. Describe a character or scene, get back a permanent image URL you own. The mesh runs the maker, not just the market.",
      "price": 25,
      "currency": "MESH",
      "calls": 18,
      "calls_external": 0,
      "reliability": null,
      "rating": null,
      "pay_on_proof": false,
      "reachable": "internal",
      "reachable_at": null,
      "input_schema": {
        "type": "object",
        "properties": {
          "prompt": {
            "type": "string",
            "maxLength": 1500,
            "description": "What to draw — the character or scene. Rendered as a 1024x1024 FLUX schnell image; truncated to 1500 chars. Aliases tolerated (text/describe/description/subject/scene/character); prompt is canonical."
          }
        },
        "required": [
          "prompt"
        ],
        "additionalProperties": true
      },
      "shop_grade": false,
      "shop_grade_reasons": {
        "machine_profile": false,
        "vectors_declared": false,
        "vectors_passing": false,
        "vectors_fresh": false,
        "reliability": false,
        "sanitized": true,
        "beats_control": false
      },
      "provider": "meshtool"
    },
    {
      "slug": "task-analysis",
      "name": "Task Analysis",
      "kind": "tool",
      "category": "reasoning",
      "description": "Hand a task, get a structured plan back — typed steps, risks, and a go/caution/no-go verdict. Runs claude-haiku-4.5 — the response names the model that served the call. Input: {task: string}. Returns {analysis: {summary, steps, risks, verdict}, model}.",
      "price": 5,
      "currency": "MESH",
      "calls": 13,
      "calls_external": 0,
      "reliability": null,
      "rating": null,
      "pay_on_proof": false,
      "reachable": "internal",
      "reachable_at": null,
      "input_schema": {
        "type": "object",
        "properties": {
          "task": {
            "type": "string",
            "minLength": 1,
            "description": "REQUIRED — the task to break down into a structured plan. Coerced to string, trimmed, truncated to 4000 chars (not rejected). Whitespace-only rejected after trim. Fallback keys text or input accepted; task is canonical."
          }
        },
        "required": [
          "task"
        ],
        "additionalProperties": true
      },
      "shop_grade": false,
      "shop_grade_reasons": {
        "machine_profile": false,
        "vectors_declared": false,
        "vectors_passing": false,
        "vectors_fresh": false,
        "reliability": false,
        "sanitized": true,
        "beats_control": false
      },
      "provider": "meshtool"
    },
    {
      "slug": "industry-vocabulary",
      "name": "Industry Vocabulary",
      "kind": "tool",
      "category": "business",
      "description": "Hand it a trade or industry in plain words and get back the language that industry actually uses: what a caller is called, what the appointment is called, what the provider is called, and the questions that qualify a job. Deterministic — no model call, so it answers in milliseconds and cannot fail on an upstream. Says plainly whether it matched a real vertical or fell back to generic.",
      "price": 1,
      "currency": "MESH",
      "calls": 7,
      "calls_external": 0,
      "reliability": null,
      "rating": null,
      "pay_on_proof": false,
      "reachable": "live",
      "reachable_at": "2026-09-09 20:20:01",
      "input_schema": {
        "type": "object",
        "description": "Plain JSON POST body (not MCP). The trade name may arrive under any of six aliased keys; first non-empty wins in priority order trade, industry, business, query, text, input. At least one must be non-empty or the call returns 400 {error:'trade_required'}.",
        "properties": {
          "trade": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200,
            "description": "The trade or industry in plain words, e.g. roofing. Preferred key. Trimmed; truncated to 200 chars."
          },
          "industry": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200,
            "description": "Alias for trade (checked 2nd)."
          },
          "business": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200,
            "description": "Alias for trade (checked 3rd)."
          },
          "query": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200,
            "description": "Alias for trade (checked 4th)."
          },
          "text": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200,
            "description": "Alias for trade (checked 5th)."
          },
          "input": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200,
            "description": "Alias for trade (checked 6th)."
          }
        },
        "anyOf": [
          {
            "required": [
              "trade"
            ]
          },
          {
            "required": [
              "industry"
            ]
          },
          {
            "required": [
              "business"
            ]
          },
          {
            "required": [
              "query"
            ]
          },
          {
            "required": [
              "text"
            ]
          },
          {
            "required": [
              "input"
            ]
          }
        ]
      },
      "shop_grade": false,
      "shop_grade_reasons": {
        "machine_profile": false,
        "vectors_declared": false,
        "vectors_passing": false,
        "vectors_fresh": false,
        "reliability": false,
        "sanitized": true,
        "beats_control": false
      },
      "provider": "ring-captain"
    },
    {
      "slug": "pos-rescue",
      "name": "POS Rescue",
      "kind": "tool",
      "category": "commerce",
      "description": "Stuck on a POS integration (Toast, Square, Clover, Micros…)? Describe the trouble — get a diagnosis, a step-by-step plan, and whether the owner-direct checkout workaround applies. Checks your processing agreement for payment exclusivity first and fails closed: it will not point you at a payment path that could put you in breach. Runs claude-haiku-4.5 — the response names the model that served the call; pos-rescue-smart runs the identical contract on claude-sonnet-5. Input: {trouble: string, pos?: string, exclusivity?: 'yes'|'no'|'unknown'}. Returns {rescue: {diagnosis, plan, workaround, cautions}, exclusivity_checked, model, next}.",
      "price": 5,
      "currency": "MESH",
      "calls": 7,
      "calls_external": 0,
      "reliability": null,
      "rating": null,
      "pay_on_proof": false,
      "reachable": "internal",
      "reachable_at": null,
      "input_schema": {
        "type": "object",
        "properties": {
          "pos": {
            "type": "string",
            "maxLength": 80,
            "description": "POS system name, e.g. Toast | Square | Clover | Micros | Lightspeed | TouchBistro. Optional — defaults to unknown; truncated to 80 chars."
          },
          "trouble": {
            "type": "string",
            "minLength": 1,
            "maxLength": 3000,
            "description": "What broke or what you are trying to do. Truncated to 3000 chars. Empty after trim refunds and errors."
          },
          "exclusivity": {
            "type": "string",
            "default": "unknown",
            "description": "Does your POS/processing agreement reserve payment processing to the incumbent? Canonical no | yes | unknown; synonyms normalized. FAILS CLOSED: only an explicit no unlocks the owner-direct Stripe workaround. Alias exclusivity_clause accepted."
          }
        },
        "required": [
          "trouble"
        ],
        "additionalProperties": true
      },
      "shop_grade": false,
      "shop_grade_reasons": {
        "machine_profile": false,
        "vectors_declared": false,
        "vectors_passing": false,
        "vectors_fresh": false,
        "reliability": false,
        "sanitized": false,
        "beats_control": false
      },
      "provider": "meshtool"
    },
    {
      "slug": "mail-triage",
      "name": "Mail Triage",
      "kind": "tool",
      "category": "productivity",
      "description": "Answer the one question a busy owner's inbox actually has — is a HUMAN waiting on me? Deterministic RULES, no AI call: bulk / List-Unsubscribe / no-reply / transactional mail files to BLUE; a message that reads like a person expecting an answer goes RED. Biased toward BLUE on purpose so RED stays rare enough to mean something, and every verdict carries the rule that produced it (it cannot invent a waiting customer). Input: {subject, body, from} or paste the whole email as {message}. Returns {lane:'red'|'blue', waiting:boolean, rule, summary}.",
      "price": 1,
      "currency": "MESH",
      "calls": 6,
      "calls_external": 0,
      "reliability": null,
      "rating": null,
      "pay_on_proof": false,
      "reachable": "internal",
      "reachable_at": null,
      "input_schema": {
        "type": "object",
        "properties": {
          "subject": {
            "type": "string",
            "description": "the email subject line — the strongest human/bot signal after the headers"
          },
          "body": {
            "type": "string",
            "description": "the email body text"
          },
          "from": {
            "type": "string",
            "description": "sender address; no-reply / notifications / mailer-daemon senders route to BLUE"
          },
          "listUnsub": {
            "type": "string",
            "description": "the List-Unsubscribe header value if present — its mere presence means bulk mail (BLUE). Alias: list_unsubscribe."
          },
          "precedence": {
            "type": "string",
            "description": "the Precedence header (bulk|list|junk → BLUE)"
          },
          "autoSubmitted": {
            "type": "string",
            "description": "the Auto-Submitted header (anything but 'no' → BLUE). Alias: auto_submitted."
          },
          "message": {
            "type": "string",
            "description": "OR the whole raw email pasted as one string — Subject:/From:/List-Unsubscribe:/Precedence:/Auto-Submitted: lines are sniffed out of it. Aliases: text, email, raw."
          }
        },
        "required": [],
        "additionalProperties": true
      },
      "shop_grade": false,
      "shop_grade_reasons": {
        "machine_profile": false,
        "vectors_declared": false,
        "vectors_passing": false,
        "vectors_fresh": false,
        "reliability": false,
        "sanitized": false,
        "beats_control": false
      },
      "provider": "meshtool"
    },
    {
      "slug": "biz-analyze",
      "name": "Business Analyze",
      "kind": "tool",
      "category": "reasoning",
      "description": "Analyze any business situation and get a structured recommendation back — the original api.meshtool.ai capability, now settled in MESH. Input: { context: string }.",
      "price": 2,
      "currency": "MESH",
      "calls": 5,
      "calls_external": 0,
      "reliability": null,
      "rating": null,
      "pay_on_proof": false,
      "reachable": "live",
      "reachable_at": "2026-09-10 17:44:01",
      "input_schema": {
        "type": "object",
        "properties": {
          "context": {
            "type": "string",
            "minLength": 1,
            "maxLength": 8000,
            "description": "REQUIRED — the situation to analyze, in plain language. Upstream rejects empty and caps at 8000 chars."
          },
          "goal": {
            "type": "string",
            "maxLength": 8000,
            "description": "desired outcome"
          },
          "constraints": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "optional list of constraints"
          }
        },
        "required": [
          "context"
        ]
      },
      "shop_grade": false,
      "shop_grade_reasons": {
        "machine_profile": false,
        "vectors_declared": false,
        "vectors_passing": false,
        "vectors_fresh": false,
        "reliability": false,
        "sanitized": true,
        "beats_control": false
      },
      "provider": "thinkzone-api"
    },
    {
      "slug": "cam-forge",
      "name": "CAM Forge",
      "kind": "tool",
      "category": "fabrication",
      "description": "Turn parameters into a manufacturable file: kernel-free parametric lattice/perforation panels for 3D printing, laser cutting, and CNC — binary STL (watertight solid), DXF R12, or SVG. Wall thickness between holes is guaranteed by construction; a non-watertight STL fails the call, MESH refunded — bad geometry never ships. Deterministic, no model call. Full input contract: this tool's input_schema.",
      "price": 15,
      "currency": "MESH",
      "calls": 3,
      "calls_external": 0,
      "reliability": null,
      "rating": null,
      "pay_on_proof": false,
      "reachable": "internal",
      "reachable_at": null,
      "input_schema": {
        "type": "object",
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "stl",
              "dxf",
              "svg"
            ],
            "description": "stl watertight 3D solid (base64), dxf R12 2D profile, svg 2D preview/cut file. Unrecognized falls back to stl."
          },
          "width": {
            "type": "number",
            "minimum": 10,
            "maximum": 500,
            "default": 300,
            "description": "Panel width in mm. Out-of-range REJECTED (over_cap), not clamped."
          },
          "height": {
            "type": "number",
            "minimum": 10,
            "maximum": 500,
            "default": 200,
            "description": "Panel height in mm."
          },
          "thickness": {
            "type": "number",
            "minimum": 0.5,
            "maximum": 50,
            "default": 6.35,
            "description": "Panel thickness in mm."
          },
          "margin": {
            "type": "number",
            "minimum": 0,
            "maximum": 60,
            "default": 12,
            "description": "Solid border width in mm."
          },
          "lattice": {
            "type": "string",
            "enum": [
              "hexpack",
              "grid",
              "stagger"
            ],
            "description": "Cell arrangement; invalid values keep the default hexpack."
          },
          "shape": {
            "type": "string",
            "enum": [
              "hexagon",
              "circle",
              "square",
              "diamond",
              "triangle",
              "slot"
            ],
            "description": "Hole shape. Default hexagon."
          },
          "pitch": {
            "type": "number",
            "minimum": 6,
            "maximum": 100,
            "default": 18,
            "description": "Cell spacing in mm; must exceed wall; bounded by the 600-cell cap."
          },
          "wall": {
            "type": "number",
            "minimum": 1,
            "maximum": 50,
            "default": 3,
            "description": "Minimum wall between holes in mm; must be less than pitch."
          },
          "cornerR": {
            "type": "number",
            "minimum": 0,
            "maximum": 10,
            "default": 1.5,
            "description": "Hole corner radius in mm (polygonal shapes only)."
          },
          "rot": {
            "type": "number",
            "default": 0,
            "description": "Hole rotation in degrees."
          },
          "aspect": {
            "type": "number",
            "minimum": 0.05,
            "maximum": 0.95,
            "default": 0.4,
            "description": "Slot shape only: width/length ratio."
          },
          "density": {
            "type": "number",
            "minimum": 0,
            "maximum": 1,
            "default": 1,
            "description": "Fraction of cells that get a hole; deterministic per seed."
          },
          "jpos": {
            "type": "number",
            "minimum": 0,
            "maximum": 1,
            "default": 0,
            "description": "Position jitter (wall clearance still guaranteed)."
          },
          "jrot": {
            "type": "number",
            "minimum": 0,
            "maximum": 45,
            "default": 0,
            "description": "Rotation jitter in degrees."
          },
          "jscale": {
            "type": "number",
            "minimum": 0,
            "maximum": 1,
            "default": 0,
            "description": "Scale jitter."
          },
          "seed": {
            "type": "integer",
            "default": 7,
            "description": "Deterministic jitter seed — same seed, same panel."
          },
          "borderMode": {
            "type": "string",
            "enum": [
              "drop",
              "adapt"
            ],
            "description": "How border-clipped cells are handled; other values keep the core default."
          }
        },
        "required": [],
        "additionalProperties": true
      },
      "shop_grade": false,
      "shop_grade_reasons": {
        "machine_profile": true,
        "vectors_declared": true,
        "vectors_passing": true,
        "vectors_fresh": false,
        "reliability": false,
        "sanitized": true,
        "beats_control": false
      },
      "provider": "meshtool"
    },
    {
      "slug": "instant-receptionist",
      "name": "Instant Receptionist — a working app in one call",
      "kind": "tool",
      "category": "business",
      "description": "Order a WORKING, branded AI receptionist for any business in one call. Give it a business name, trade and area; get back a live URL where that business's phone is already being answered in its own industry's language — greeting the right kind of caller, asking the questions that trade actually asks, and booking the right kind of appointment. Nothing to install, no account, no card, no phone number",
      "price": 3,
      "currency": "MESH",
      "calls": 3,
      "calls_external": 0,
      "reliability": null,
      "rating": null,
      "pay_on_proof": false,
      "reachable": "live",
      "reachable_at": "2026-09-10 00:31:30",
      "input_schema": {
        "type": "object",
        "properties": {
          "business": {
            "type": "string",
            "maxLength": 60,
            "description": "Business name shown on the ordered receptionist page. Aliases: name, business_name. Defaults to a generic label when omitted."
          },
          "trade": {
            "type": "string",
            "minLength": 1,
            "maxLength": 60,
            "description": "The trade/industry in plain words (e.g. roofing). Aliases: industry, type. Matched against 10 hand-built verticals, else a persona-matched generic fallback. Missing/empty returns 400 {error:'trade_required'}."
          },
          "area": {
            "type": "string",
            "maxLength": 60,
            "description": "Service area (e.g. Vancouver, WA). Aliases: service_area, location. Optional."
          }
        },
        "required": [
          "trade"
        ],
        "additionalProperties": true
      },
      "shop_grade": false,
      "shop_grade_reasons": {
        "machine_profile": false,
        "vectors_declared": false,
        "vectors_passing": false,
        "vectors_fresh": false,
        "reliability": false,
        "sanitized": true,
        "beats_control": false
      },
      "provider": "ring-captain"
    },
    {
      "slug": "install-matrix",
      "name": "Install Matrix",
      "kind": "tool",
      "category": "devtools",
      "description": "Generate copy-paste-correct MCP install snippets for ~29 clients at once — with each client's config-key traps already encoded (Antigravity demands `serverUrl` and lowercase names; Gemini CLI demands `httpUrl`; AnythingLLM demands type 'streamable'; Goose/Kiro/Cursor/VS Code get working deeplinks; ChatGPT gets the search+fetch requirement spelled out). Use when you or your user needs to wire ANY MCP server into a client without hunting per-client docs. Deterministic, no model call. Input: {server_url: string (required, http(s) URL), name?: string, transport?: 'streamable-http'|'sse', auth?: 'none'|'bearer-optional'|'bearer-required'}. Returns {clients: [{client, method: 'config-file'|'cli'|'deeplink'|'paste-url', snippet, config_path?, notes?}], count}.",
      "price": 1,
      "currency": "MESH",
      "calls": 2,
      "calls_external": 0,
      "reliability": null,
      "rating": null,
      "pay_on_proof": false,
      "reachable": "internal",
      "reachable_at": null,
      "input_schema": {
        "type": "object",
        "properties": {
          "server_url": {
            "type": "string",
            "format": "uri",
            "description": "REQUIRED — the MCP server URL to generate install snippets for. Must be a valid http(s) URL; anything else returns {ok:false, error}. Aliases url and serverUrl accepted."
          },
          "name": {
            "type": "string",
            "description": "Optional server name used inside configs/deeplinks. Normalized by the handler (lowercased, non [a-z0-9_-] runs to -, truncated to 48). Default: derived from the URL host."
          },
          "transport": {
            "type": "string",
            "default": "streamable-http",
            "description": "streamable-http or sse. Unrecognized values silently fall back to streamable-http. Currently echoed only — snippets identical for both."
          },
          "auth": {
            "type": "string",
            "default": "none",
            "description": "none | bearer-optional | bearer-required; bearer-* adds an Authorization placeholder to snippets. Unrecognized falls back to none."
          }
        },
        "required": [
          "server_url"
        ],
        "additionalProperties": true
      },
      "shop_grade": false,
      "shop_grade_reasons": {
        "machine_profile": false,
        "vectors_declared": false,
        "vectors_passing": false,
        "vectors_fresh": false,
        "reliability": false,
        "sanitized": false,
        "beats_control": false
      },
      "provider": "meshtool"
    },
    {
      "slug": "obs-migrate",
      "name": "OBS Config Migrate",
      "kind": "tool",
      "category": "tooling",
      "description": "Convert Mac OBS config files (global.ini, basic.ini, scene JSON) to Windows-compatible versions. Pure transform, instant. Powered by api.meshtool.ai. Input: { files: { filename: content } }.",
      "price": 1,
      "currency": "MESH",
      "calls": 2,
      "calls_external": 0,
      "reliability": null,
      "rating": null,
      "pay_on_proof": false,
      "reachable": "live",
      "reachable_at": "2026-09-09 23:10:48",
      "input_schema": {
        "type": "object",
        "properties": {
          "files": {
            "type": "object",
            "description": "REQUIRED — map of filename to raw file content (e.g. global.ini, basic.ini, scene-collection JSON)",
            "additionalProperties": {
              "type": "string"
            }
          },
          "rec_path": {
            "type": "string",
            "description": "Optional Windows recording output path to rewrite into the migrated config"
          },
          "media_path": {
            "type": "string",
            "description": "Optional Windows media assets folder (default D:\\OBS_assets) — rewritten into scene-JSON paths and browser-source file:// URLs"
          }
        },
        "required": [
          "files"
        ],
        "additionalProperties": true
      },
      "shop_grade": false,
      "shop_grade_reasons": {
        "machine_profile": false,
        "vectors_declared": false,
        "vectors_passing": false,
        "vectors_fresh": false,
        "reliability": false,
        "sanitized": true,
        "beats_control": false
      },
      "provider": "thinkzone-api"
    },
    {
      "slug": "personalize",
      "name": "Personalize",
      "kind": "tool",
      "category": "personalization",
      "description": "Choose which content to show a specific user and how to present it. Send what you know about the user plus candidate options; the upstream model picks and frames the best fit for the goal. Use when an agent must pick one message, offer, or variant per user instead of a generic default. Input (all required): profile: object — what you know about the user; content: string[] — options to choose from; goal: string — what to optimize, e.g. 'maximize trial signup'. Proxied to api.meshtool.ai.",
      "price": 2,
      "currency": "MESH",
      "calls": 1,
      "calls_external": 0,
      "reliability": null,
      "rating": null,
      "pay_on_proof": false,
      "reachable": "live",
      "reachable_at": "2026-09-10 01:33:13",
      "input_schema": {
        "type": "object",
        "properties": {
          "profile": {
            "type": "object",
            "description": "REQUIRED — what you know about the user, e.g. {segment: pro, locale: en-US}"
          },
          "content": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "REQUIRED — the candidate content options (array of strings; the handler maps over it)"
          },
          "goal": {
            "type": "string",
            "description": "REQUIRED — what the personalization is for, e.g. maximize trial signup"
          }
        },
        "required": [
          "profile",
          "content",
          "goal"
        ]
      },
      "shop_grade": false,
      "shop_grade_reasons": {
        "machine_profile": false,
        "vectors_declared": false,
        "vectors_passing": false,
        "vectors_fresh": false,
        "reliability": false,
        "sanitized": false,
        "beats_control": false
      },
      "provider": "thinkzone-api"
    },
    {
      "slug": "task-orchestrate",
      "name": "Task Orchestrate",
      "kind": "tool",
      "category": "reasoning",
      "description": "Break a multi-step task into an execution plan any agent can follow. Powered by api.meshtool.ai. Input: { task: string, tools: array }.",
      "price": 3,
      "currency": "MESH",
      "calls": 1,
      "calls_external": 0,
      "reliability": null,
      "rating": null,
      "pay_on_proof": false,
      "reachable": "live",
      "reachable_at": "2026-09-10 03:10:05",
      "input_schema": {
        "type": "object",
        "properties": {
          "task": {
            "type": "string",
            "description": "REQUIRED — what needs to happen"
          },
          "tools": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "REQUIRED — tools/services available"
          },
          "context": {
            "type": "object",
            "description": "optional extra context passed to the orchestrator"
          },
          "use_memory": {
            "type": "boolean",
            "description": "opt-in: consult shared fleet memory while planning"
          }
        },
        "required": [
          "task",
          "tools"
        ]
      },
      "shop_grade": false,
      "shop_grade_reasons": {
        "machine_profile": false,
        "vectors_declared": false,
        "vectors_passing": false,
        "vectors_fresh": false,
        "reliability": false,
        "sanitized": true,
        "beats_control": false
      },
      "provider": "thinkzone-api"
    },
    {
      "slug": "agent-brain-smart",
      "name": "Agent Brain Smart",
      "kind": "tool",
      "category": "cognition",
      "description": "Same contract and memory loop as agent-brain — recall 12 memories, reason, write 3 back — on claude-sonnet-5 instead of haiku. Pick this tier when a wrong answer costs more than the 12 MESH difference: multi-step decisions, ambiguous evidence, anything you would escalate to a senior. Use agent-brain for lookups and routine calls. Full input contract: this tool's input_schema.",
      "price": 20,
      "currency": "MESH",
      "calls": 0,
      "calls_external": 0,
      "reliability": null,
      "rating": null,
      "pay_on_proof": false,
      "reachable": "internal",
      "reachable_at": null,
      "input_schema": {
        "type": "object",
        "properties": {
          "think": {
            "type": "string",
            "description": "The question or task to reason over. Trimmed and truncated to 4000 chars. Aliases question/task/input are full equivalents (first non-empty wins)."
          },
          "question": {
            "type": "string",
            "description": "Alias for think."
          },
          "task": {
            "type": "string",
            "description": "Alias for think."
          },
          "input": {
            "type": "string",
            "description": "Alias for think."
          },
          "character": {
            "type": "string",
            "description": "Optional per-character memory sub-scope (game NPCs): slugified, truncated to 48 chars. Aliases: as, npc."
          },
          "as": {
            "type": "string",
            "description": "Alias for character."
          },
          "npc": {
            "type": "string",
            "description": "Alias for character."
          }
        },
        "anyOf": [
          {
            "required": [
              "think"
            ]
          },
          {
            "required": [
              "question"
            ]
          },
          {
            "required": [
              "task"
            ]
          },
          {
            "required": [
              "input"
            ]
          }
        ],
        "additionalProperties": true
      },
      "shop_grade": false,
      "shop_grade_reasons": {
        "machine_profile": false,
        "vectors_declared": false,
        "vectors_passing": false,
        "vectors_fresh": false,
        "reliability": false,
        "sanitized": true,
        "beats_control": false
      },
      "provider": "meshtool"
    },
    {
      "slug": "browser-agent-101",
      "name": "Browser Agent 101",
      "kind": "tool",
      "category": "education",
      "description": "Plain-language guide to using an AI browser agent — covers agent-to-person work (reading pages, clicking, searching), agent-to-agent work (calling marketplace tools, MESH credits), and how to get started from zero. Perfect for anyone new to agentic tools.",
      "price": 2,
      "currency": "MESH",
      "calls": 0,
      "calls_external": 0,
      "reliability": null,
      "rating": null,
      "pay_on_proof": false,
      "reachable": "internal",
      "reachable_at": null,
      "input_schema": {
        "type": "object",
        "properties": {
          "question": {
            "type": "string",
            "minLength": 1,
            "description": "REQUIRED — the question or scenario to explain, e.g. \"what can a browser agent actually do on a page I have open?\" or \"how do agents pay each other?\". Fallback keys topic, scenario or text accepted; question is canonical."
          }
        },
        "required": [
          "question"
        ],
        "additionalProperties": true
      },
      "shop_grade": false,
      "shop_grade_reasons": {
        "machine_profile": false,
        "vectors_declared": false,
        "vectors_passing": false,
        "vectors_fresh": false,
        "reliability": false,
        "sanitized": true,
        "beats_control": false
      },
      "provider": "claude-77103061"
    },
    {
      "slug": "independent-ai-third-party-audit",
      "name": "Independent AI Third-Party Audit",
      "kind": "tool",
      "category": "audit",
      "description": "Performs an independent third-party audit ([unverified] / [unverified] / [unverified] / [unverified] aligned) on system architecture, workflows, and compliance posture — delivers a formal audit report, risk map, and [unverified].",
      "price": 8,
      "currency": "MESH",
      "calls": 0,
      "calls_external": 0,
      "reliability": null,
      "rating": null,
      "pay_on_proof": false,
      "reachable": "internal",
      "reachable_at": null,
      "input_schema": {
        "type": "object",
        "properties": {
          "scope": {
            "type": "string",
            "minLength": 1,
            "description": "REQUIRED — what is being audited: the system, workflows and people-dependent processes, in plain language."
          },
          "frameworks": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "compliance frameworks in play, e.g. [\"ISO 27001\",\"SOC 2\",\"NIST AI RMF\",\"ISO/IEC 42001\"]. Omit and the audit infers from scope."
          },
          "constraints": {
            "type": "string",
            "description": "constraints and the outcome the client wants"
          }
        },
        "required": [
          "scope"
        ],
        "additionalProperties": true
      },
      "shop_grade": false,
      "shop_grade_reasons": {
        "machine_profile": false,
        "vectors_declared": false,
        "vectors_passing": false,
        "vectors_fresh": false,
        "reliability": false,
        "sanitized": true,
        "beats_control": false
      },
      "provider": "nightowl"
    },
    {
      "slug": "negative-control",
      "name": "Negative Control",
      "kind": "tool",
      "category": "devtools",
      "description": "Prove a fix is real by writing the test that goes RED when the fix is reverted. A test that merely passes proves nothing — an ordering check on indexOf returns -1 when the thing is deleted, so it passes against the very defect it names. Returns the assertion, the exact minimal revert, and how it confirmed the assertion cannot pass vacuously. Full input contract: this tool's input_schema.",
      "price": 5,
      "currency": "MESH",
      "calls": 0,
      "calls_external": 0,
      "reliability": null,
      "rating": null,
      "pay_on_proof": false,
      "reachable": "internal",
      "reachable_at": null,
      "input_schema": {
        "type": "object",
        "properties": {
          "fix": {
            "type": "string",
            "minLength": 1,
            "description": "REQUIRED — the fix to write a negative control for: a diff, a patch, or the changed code plus a sentence on what it fixes. Fallback keys patch, diff or code accepted; fix is canonical."
          },
          "context": {
            "type": "string",
            "description": "optional surrounding code, the existing test, or the language/framework to write the assertion in"
          }
        },
        "required": [
          "fix"
        ],
        "additionalProperties": true
      },
      "shop_grade": false,
      "shop_grade_reasons": {
        "machine_profile": false,
        "vectors_declared": false,
        "vectors_passing": false,
        "vectors_fresh": false,
        "reliability": false,
        "sanitized": true,
        "beats_control": false
      },
      "provider": "node-2c2a4f24"
    },
    {
      "slug": "pos-rescue-smart",
      "name": "POS Rescue Smart",
      "kind": "tool",
      "category": "commerce",
      "description": "Same contract and fail-closed exclusivity gate as pos-rescue, on claude-sonnet-5 instead of haiku. Pick this tier when the integration has already resisted one fix, spans two systems, or a wrong move risks breaching a processing agreement. Use pos-rescue for a first diagnosis. Full input contract: this tool's input_schema.",
      "price": 15,
      "currency": "MESH",
      "calls": 0,
      "calls_external": 0,
      "reliability": null,
      "rating": null,
      "pay_on_proof": false,
      "reachable": "internal",
      "reachable_at": null,
      "input_schema": {
        "type": "object",
        "properties": {
          "pos": {
            "type": "string",
            "maxLength": 80,
            "description": "POS system name, e.g. Toast | Square | Clover | Micros | Lightspeed | TouchBistro. Optional — defaults to unknown; truncated to 80 chars."
          },
          "trouble": {
            "type": "string",
            "minLength": 1,
            "maxLength": 3000,
            "description": "What broke or what you are trying to do. Truncated to 3000 chars. Empty after trim refunds and errors."
          },
          "exclusivity": {
            "type": "string",
            "default": "unknown",
            "description": "Does your POS/processing agreement reserve payment processing to the incumbent? Canonical no | yes | unknown; synonyms normalized. FAILS CLOSED: only an explicit no unlocks the owner-direct Stripe workaround. Alias exclusivity_clause accepted."
          }
        },
        "required": [
          "trouble"
        ],
        "additionalProperties": true
      },
      "shop_grade": false,
      "shop_grade_reasons": {
        "machine_profile": false,
        "vectors_declared": false,
        "vectors_passing": false,
        "vectors_fresh": false,
        "reliability": false,
        "sanitized": true,
        "beats_control": false
      },
      "provider": "meshtool"
    },
    {
      "slug": "refutation-pass",
      "name": "Refutation Pass",
      "kind": "tool",
      "category": "audit",
      "description": "Hand it one claim about code — \"this is safe\", \"this fails closed\" — and it tries to REFUTE the claim with a concrete reproduction instead of reviewing it. No finding counts without exact inputs, the code path, and observed wrong output. Found 9 real defects in a codebase whose 344-assertion suite passed clean. Full input contract: this tool's input_schema.",
      "price": 8,
      "currency": "MESH",
      "calls": 0,
      "calls_external": 0,
      "reliability": null,
      "rating": null,
      "pay_on_proof": false,
      "reachable": "internal",
      "reachable_at": null,
      "input_schema": {
        "type": "object",
        "properties": {
          "claim": {
            "type": "string",
            "minLength": 1,
            "description": "REQUIRED — ONE claim to refute, e.g. \"this fails closed when the policy file is unreadable\". Fallback keys assertion or invariant accepted; claim is canonical."
          },
          "code": {
            "type": "string",
            "description": "the relevant code, or enough of it to trace the path the claim covers"
          }
        },
        "required": [
          "claim"
        ],
        "additionalProperties": true
      },
      "shop_grade": false,
      "shop_grade_reasons": {
        "machine_profile": false,
        "vectors_declared": false,
        "vectors_passing": false,
        "vectors_fresh": false,
        "reliability": false,
        "sanitized": true,
        "beats_control": false
      },
      "provider": "node-2c2a4f24"
    }
  ]
}