Skip to main content
Glama
304,964 tools. Last updated 2026-07-22 15:09

"TypeScript" matching MCP tools:

  • Compile TypeScript source (defineIntent() call) into native Swift App Intent code. Returns { swift, infoPlist?, entitlements? } as a string — no files written, no network requests. On validation failure, returns diagnostics (severity, AX error code, position, fix suggestion) instead of Swift. Use: use when TypeScript DSL source should become Swift; use validate for cheaper preflight only. Inputs: source is TypeScript DSL text; options add sandbox, format, plist, or entitlement proof without writing files. Effects: read-only generated Swift/diagnostics; writes no files and uses no network.
    Connector
  • Execute JavaScript code against the Wix REST API. CRITICAL CODE SHAPE: - The `code` parameter MUST be the function expression itself: `async function() { ... }` or `async () => { ... }`. - Do NOT send a script body like `const result = await ...; return result;`. - Do NOT call the function yourself. The tool calls it for you. - Put all `const`, `await`, and `return` statements inside the function body. MULTI-SITE (read this first): - If the task spans several sites — "all my sites", "each of my sites", "every site", or a given list of sites — you MUST handle them in ONE `ExecuteWixAPI` call. Inside that single function, loop over the site IDs and fan out with `Promise.allSettled`, passing a per-request `siteId` to each `wix.request({ scope: "site", siteId, method, url, body })`. - Do NOT make a separate `ExecuteWixAPI` call per site. One call handles all of them; the runtime obtains the correct token for each `siteId` automatically. - You already have the site IDs from `ListWixSites`; pass that array into the function, or list the sites with a single account-scope Sites API call inside the function. See the "multi-site" example below. Do not rely on memory for Wix API endpoints, methods, schemas, or request bodies. Before writing code, use SearchWixAPISpec or the search, browse, read-docs, and schema tools to confirm the exact API URL, HTTP method, request body structure, schema field names, required fields, enum values, and auth context. Before accessing fields on a response object, know the exact shape — don't guess paths like `result.id` when the actual path might be `result.results[0].item.id`. When you fetch the method schema for the request body, include `responses: method.responses` at the same time — it costs nothing and tells you exactly what fields come back. When SearchWixAPISpec returns a method schema, use `method.publicUrl` for ExecuteWixAPI when available; do not use `method.servers[0]`, which may be an internal Wix host. Pass the docs article, recipe, or schema URLs you used in the `sourceDocUrls` parameter. Then write code using wix.request(). Auth is handled automatically — do NOT set Authorization, wix-site-id, or wix-account-id headers. This tool overlaps with `CallWixSiteAPI` and `ManageWixSite`: all can call Wix REST APIs. Use `ExecuteWixAPI` when code helps express the task: repeating one API call in a loop, paginating through results, transforming data between calls, branching on API responses, or chaining several related API calls in one operation. Probing is useful when it is read-only: use GET/query/list/search calls to inspect existing state, resolve real IDs, confirm response shapes, or verify a previous write. For create/update/delete calls, search docs, read docs, and inspect schemas first; call the mutation only with real resolved inputs, and avoid using placeholder IDs or speculative mutation calls just to discover validation behavior or response shape. If a mutation succeeds but you need more details, use the returned data or follow up with a read-only GET/query; do not repeat the mutation only to get a different response shape. Use `wix.request({ method, url, body })` for API calls. Scope defaults to `"site"` when the ExecuteWixAPI `siteId` parameter is passed, otherwise `"account"`. Set `scope: "site"` explicitly for site-level APIs, which is the common case for business domains such as Stores, Bookings, CRM, Forms, CMS, Events, and Blog. Set `scope: "account"` explicitly for account-level APIs such as Sites, Site Folders, Domains, and User Management, or when the docs/schema indicate account-level auth. For MULTIPLE sites, do everything in a single `ExecuteWixAPI` call — never one call per site. Map over the site IDs and fan out with `Promise.allSettled`, passing a per-request `siteId` to each `wix.request({ scope: "site", siteId, method, url, body })`; the runtime resolves the correct token for each site automatically (do not set auth headers). For a SINGLE site you may instead pass the site ID in the tool-level `siteId` parameter, which becomes the default for any site-level `wix.request()` that omits its own `siteId`. Typical multi-site flow: take the site IDs you already have from `ListWixSites` (or list them with one account-scope Sites API call inside the function), then map over them. Since a mutation fans out to every site you target, be deliberate about which sites you include and return exactly which succeeded and which failed. Error handling: `wix.request()` throws when the Wix API returns an error. If calls depend on each other, let the error throw so the tool reports a clear failure. For independent read-only probes, you may wrap each call in `try/catch` and return structured partial results such as `{ ok: false, error }`. When running independent calls in parallel, use `Promise.allSettled` rather than `Promise.all` so that a single failure does not discard the other results. For mutations, avoid swallowing errors unless you also return exactly which writes succeeded and which failed. Available in your code: ```typescript interface WixRequestOptions { scope?: "site" | "account"; // Defaults to "site" when a siteId is available, otherwise "account" siteId?: string; // Per-request target site for multi-site calls; defaults to the tool-level siteId method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE"; url: string; // Prefer method.publicUrl from SearchWixAPISpec, e.g. "https://www.wixapis.com/stores/v1/products/query"; paths like "/stores/v1/products/query" are resolved against https://www.wixapis.com body?: unknown; headers?: Record<string, string>; // Do NOT set Authorization, wix-site-id, or wix-account-id } interface WixResponse<T = unknown> { status: number; data: T; json(): Promise<T>; // Fetch-compatible alias for data } declare const wix: { request<T = unknown>(options: WixRequestOptions): Promise<WixResponse<T>>; }; declare const siteId: string | undefined; // Tool-level siteId passed to ExecuteWixAPI, if any. ``` Your code MUST be an async function expression that returns the result: ```javascript async () => { const response = await wix.request({ method: "GET", url: "https://www.wixapis.com/<account-level-endpoint>" }); return response.data; } ``` The response is available as `response.data`. For compatibility with fetch-style code, `await response.json()` returns the same data. Return compact, task-focused data instead of raw API responses. For list/query/search endpoints, especially "list all" tasks or APIs that may return many items, paginate in code and map each item to the fields needed for the task. Include IDs, metadata, nested fields, or raw response fragments when they are needed to complete the task, disambiguate entities, verify mutations, or answer the user. If the user asks for names and types, return only names and types. For hundreds of items, avoid verbose JSON objects because repeated keys waste tokens; return compact strings such as `"Name - TYPE"` joined with newlines, or small tuples such as `["Name", "TYPE"]`. If the user asks for a specific output value, include that value explicitly in the returned object so the final answer can report it. If you need to filter by a field, verify the endpoint supports that filter in the method docs/schema or related "Supported Filters and Sorting" docs; otherwise retrieve a bounded page and filter in JavaScript. When looking up an item by user-provided name, paginate/search until you find an exact name match; never update or delete the first result unless it exactly matches. Example — MULTIPLE sites in ONE call: same query across every site, in parallel, compact per-site output. This is the required shape for "all my sites" / "each site" tasks — do NOT call ExecuteWixAPI once per site: ```javascript async function() { // 1) List the account's sites (account scope) — or pass in IDs you already have from ListWixSites. const sitesRes = await wix.request({ scope: "account", method: "POST", url: "https://www.wixapis.com/site-list/v2/sites/query", body: { query: { cursorPaging: { limit: 100 } } } }); const sites = sitesRes.data.sites ?? []; // 2) Fan out one site-scoped request per site with a per-request siteId — all in this single call. const results = await Promise.allSettled( sites.map(site => wix.request({ scope: "site", siteId: site.id, method: "POST", url: "https://www.wixapis.com/<site-analytics-endpoint>", body: { /* ... */ } }).then(r => ({ siteId: site.id, name: site.displayName, data: r.data })) ) ); // 3) Return a compact per-site summary — not raw payloads (avoid truncation). return results.map((r, i) => r.status === "fulfilled" ? { site: r.value.name, ok: true, value: r.value.data } : { site: sites[i].displayName, ok: false, error: String(r.reason) } ); } ``` Example — site-level request with compact output: ```javascript async function() { const response = await wix.request({ method: "POST", url: "https://www.wixapis.com/<site-level-endpoint>", body: { query: { cursorPaging: { limit: 100 } } } }); const items = response.data.items ?? response.data.results ?? []; return { count: items.length, items: items.map(item => item.name + " - " + item.type).join("\ ") }; } ``` Example — account-level request: ```javascript async function() { const response = await wix.request({ scope: "account", method: "POST", url: "https://www.wixapis.com/<account-level-endpoint>", body: { query: { cursorPaging: { limit: 50 } } } }); return response.data; } ``` Example — parallel independent read-only probes with partial results: ```javascript async function() { const [productsResult, collectionsResult] = await Promise.allSettled([ wix.request({ scope: "site", method: "POST", url: "https://www.wixapis.com/<products-query-endpoint>", body: { query: { cursorPaging: { limit: 10 } } } }), wix.request({ scope: "site", method: "POST", url: "https://www.wixapis.com/<collections-query-endpoint>", body: { query: { cursorPaging: { limit: 10 } } } }) ]); return { products: productsResult.status === "fulfilled" ? { ok: true, count: (productsResult.value.data.items ?? productsResult.value.data.products ?? []).length } : { ok: false, error: String(productsResult.reason) }, collections: collectionsResult.status === "fulfilled" ? { ok: true, count: (collectionsResult.value.data.items ?? collectionsResult.value.data.collections ?? []).length } : { ok: false, error: String(collectionsResult.reason) } }; } ``` Example — chain related mutation calls and fail fast on API errors: ```javascript async function() { const list = await wix.request({ scope: "site", method: "POST", url: "https://www.wixapis.com/<query-endpoint>", body: { query: { cursorPaging: { limit: 20 } } } }); const items = list.data.items ?? []; const match = items.find(item => item.name === "Target name"); if (!match) { return { error: "NOT_FOUND", available: items.map(item => ({ id: item.id, name: item.name })) }; } const updated = await wix.request({ scope: "site", method: "PATCH", url: `https://www.wixapis.com/<update-endpoint>/${match.id}`, body: { item: { id: match.id, revision: match.revision, name: "Updated name" } } }); return { id: updated.data.item?.id, name: updated.data.item?.name, revision: updated.data.item?.revision }; } ```
    Connector
  • WORKFLOW: Step 1 of 4 - Start infrastructure design conversation Open an InsideOut V2 session and receive the assistant's intro message. The response contains a clean message from Riley (the infrastructure advisor) - display it to the user. ⚠️ Riley will ask questions - forward these to the user, DO NOT answer on their behalf. CRITICAL: This tool returns a session_id in the response metadata. You MUST use this session_id for ALL subsequent tool calls (convoreply, tfgenerate, tfdeploy, etc.). ⚠️ The session_id includes a ?token=... suffix (format: sess_v2_xxx?token=yyy) which is part of the session credential — without it, downstream tools fall back to a tokenless connect URL that 401s. Always pass session_id verbatim to subsequent tools and to the user; do NOT shorten, paraphrase, or strip the ?token= portion when summarizing the session in chat or in your own scratch notes. Use when the user mentions keywords like: 'setup my cloud infra', 'provision infrastructure', 'deploy infra', 'start insideout', 'use insideout', or similar intent to begin infra setup. OPTIONAL: project_context (string) - General tech stack summary so Riley can skip discovery questions and jump to recommendations. The agent should confirm this with the user before sending. Include whichever apply: language/framework, databases/services, container usage, existing IaC, CI/CD platform, cloud provider, Kubernetes usage, what the project does. Example: 'Next.js 14 + TypeScript, PostgreSQL, Redis, Docker Compose, deployed to AWS ECS, GitHub Actions CI/CD, ~50k MAU'. NEVER include credentials, secrets, API keys, PII, source code, or internal URLs/IPs -- only general metadata summaries useful to a cloud architect agent. IMPORTANT: source (string) - You MUST set this to identify which IDE/tool you are. Auto-detect from your environment: 'claude-code', 'codex', 'antigravity', 'kiro', 'vscode', 'web', 'mcp'. If unsure, use the name of your IDE/tool in lowercase. Do NOT omit this — it controls the 'Open {IDE}' button on the credential connect screen. OPTIONAL: github_username (string) - GitHub username for deploy commit attribution. Pre-populates the GitHub username field on the connect page. 💡 TIP: Examine workflow.usage prompt for more context on how to properly use these tools.
    Connector
  • Submit an entry. Agents set up via the omniology.ai wizard are ENROLLED for instant entry: one call with { contest_id, agent_id, payload } confirms immediately — no signing (no agent yet? call start_onboarding). Everyone else uses the two-call enter_contest handshake below. The engine never holds your private key, so the on-chain tx is co-signed across two MCP calls. STEP 1: call with { contest_id, agent_id, payload } — OMIT transaction_signature. Engine returns { status: 'pending_agent_signature', pending_tx, entry_ticket_pda, expected_fee_micro_usdc }. STEP 2: deserialise pending_tx, partialSign with your wallet, broadcast, wait for 'confirmed'. STEP 3: call again with the same args PLUS transaction_signature. Engine verifies the on-chain EntryTicket and returns { status: 'confirmed', entry_id, accepted, position, judging_at }. The entry fee is moved atomically by the contract's enter_contest CPI — no separate USDC transfer is required. The engine sets the priority fee + compute budget and pays the network fee itself. Just sign the pending_tx exactly as returned and broadcast it — do NOT add or change any instructions, or the engine's signature becomes invalid. COACHING FEEDBACK (include_feedback): pass include_feedback:true to get a 2-3 sentence judge rationale after judging (on judge_feedback, for wins AND losses). It's FREE. Surface this to your user naturally — don't be pushy: • ONBOARDING: mention it early — 'I can turn on judge feedback to learn why our entries score the way they do.' • LOSING STREAK (3-5 losses in a row): proactively ask — 'We've lost a few in a row; want me to enable feedback on the next few entries to see what's not working?' • ON REQUEST: when the user asks why you lost / wants to improve, set include_feedback:true on the next entries, then read it back from get_my_history. ERROR CODES (plain-English message + what to do is in each response): - TOS_ACCEPTANCE_REQUIRED: accept the ToS first (re-register with terms_of_service_accepted=true / re-run npx omniology-init) - EMAIL_VERIFICATION_REQUIRED: verify your email first (request_email_verification → click the link → retry). Everything except submit_entry works without this. - WALLET_INSUFFICIENT_BALANCE: not enough USDC in your Balance when the tx broadcasts - CONTEST_CLOSED: the entry window has closed — call list_active_contests for a fresh batch - TIMING_INSUFFICIENT_FOR_HANDSHAKE: too little time left to enter safely — skip to the next contest - DUPLICATE_ENTRY: this agent already entered this contest (or tx sig reused) - RATE_LIMITED_DUPLICATE_ENTRY: too many submit calls per minute — slow down - INVALID_TRANSACTION: on-chain EntryTicket not found yet — wait a few seconds and retry step 3 - PAYLOAD_INVALID: payload too long or wrong format REFERENCE TYPESCRIPT: ```typescript import { Connection, Transaction } from '@solana/web3.js'; // STEP 1 — ask engine for partial tx const step1 = await mcp.callTool('submit_entry', { contest_id, agent_id, payload }); // step1 = { status: 'pending_agent_signature', pending_tx, entry_ticket_pda, expected_fee_micro_usdc } // STEP 2 — sign + broadcast const tx = Transaction.from(Buffer.from(step1.pending_tx, 'base64')); tx.partialSign(myWallet); // engine already signed as fee payer const sig = await connection.sendRawTransaction(tx.serialize()); await connection.confirmTransaction(sig, 'confirmed'); // STEP 3 — confirm with engine const step3 = await mcp.callTool('submit_entry', { contest_id, agent_id, payload, transaction_signature: sig }); // step3 = { status: 'confirmed', entry_id, accepted, position, judging_at } ```
    Connector
  • Generate Jest/Vitest tests for the exported functions and React components in a TypeScript source file. Use this whenever the user asks for tests, test scaffolding, or test coverage of a .ts or .tsx file. Returns the generated test (and any companion .3tg.md / __mocks__) file contents, with paths already translated to the user's `.3tg/` mirror convention. Quota / credits: this tool consumes credits — and credits are consumed ONLY by test generation (not by spec / mock / lookup tools). The accounting is exactly **1 credit per generated test case** (i.e. per `test(...)` / `it(...)` block 3TG emits inside the returned `.test.ts` / `.test.tsx`), regardless of how many source functions or files were in scope — a call that produces 12 test cases costs 12 credits, even if all 12 cover a single function. Before generation the MCP verifies the clientId has credits with license-api.coding-creed.tech; on exhaustion the tool throws a QUOTA_EXHAUSTED error pointing the user at https://3tg.dev. After a successful run, consumed credits and KPIs are reported back to license-api. Re-running this tool on the same source spends credits again — there is no caching. When the previous call returned `enrichment.used: false` (AI enrichment unavailable on this client), supply parameter values + expected returns yourself via the `cliConfig` parameter — package them as `{"mock-parameters": ..., "function-returns": ...}` (same shape AI enrichment would produce) and pass them on a retry call. **Do NOT autonomously write `.3tg/config.3tg.json`** to persist those values — that file is human-curated; agent-computed values ride along in `cliConfig` for the current call only. (Explicit user requests to edit the file are fine — handle those normally.) See the cliConfig parameter description below for the full pattern. CRITICAL POST-CALL ACTION — write returned files to disk: The MCP server does NOT touch the user's filesystem. It returns the generated file CONTENTS in the response's `files` array. After this tool returns, you MUST iterate over `files` and write each entry's `content` verbatim to its `path` using your native file-write capability (e.g. Write / edit_file / create_file — whatever your client exposes). Create parent directories as needed. Returned paths are project-root-relative and already translated to the `.3tg/` mirror convention where applicable (e.g. specs land under `.3tg/<source-path>.3tg.md`; tests / mocks travel through unchanged). Write each path verbatim. Do NOT claim "Generated test file: <path>" unless you have actually written the file. The user will assume the MCP wrote it and waste time looking for a non-existent file. If you can't write for some reason (permission denied, no write capability in this client), return the contents inline in your message so the user can copy-paste them. Never report success silently when the write didn't happen.
    Connector

Matching MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    A specialized server that provides advanced TypeScript code manipulation and analysis capabilities, enabling refactoring, navigation, diagnostics, and module analysis through Claude.
    Last updated
    11
    15,760
    454
    MIT

Matching MCP Connectors

  • Kickstart development with a customizable TypeScript template featuring sample tools for greeting,…

  • Stop your AI agents from writing sloppy TypeScript. A toolkit that teaches coding agents like Claude Code, Codex, Cursor, Amp, and more to ship production-ready code in half the time, at half the cost. Docs are available at https://convention.sh/docs

  • Search the RoxyAPI knowledge base and get back ranked documentation snippets, each with a source URL. It covers API endpoints with their request and response fields, SDK usage for TypeScript, Python, PHP, C#, and the WordPress plugin, authentication and API keys, UI components, and step by step integration guides. Call this first whenever you need to integrate RoxyAPI into an app: to find which endpoint or SDK method to use, what parameters a call takes, how to authenticate, or how to wire a feature end to end. Pass the user question verbatim as `query`. If the first results miss, rephrase once and retry.
    Connector
  • Run JavaScript against the Wix REST API on site "CodeStringers - Zoho Services" (https://www.codestringers.com/_api/mcp), on the visitor's behalf. The code runs in a sandbox and you get back whatever it returns. PREFER THIS TOOL OVER CallWixSiteAPI. CallWixSiteAPI makes a single HTTP request; ExecuteWixAPI runs real code, so you can chain calls, paginate, filter, and shape the result in one step. Use ExecuteWixAPI for any Wix API work on this site, and fall back to CallWixSiteAPI only for a trivial one-shot read where code adds nothing. DO A WHOLE RECIPE IN ONE CALL. When a task needs several requests — e.g. query to resolve an id, then mutate; create then confirm; read a list then act on a match — write ONE ExecuteWixAPI call whose code performs every step in sequence and returns the final result. Do NOT split a multi-request recipe into multiple separate tool calls; that wastes round-trips and loses intermediate state. If a recipe from the docs lists steps 1..N, the code should run steps 1..N. CRITICAL CODE SHAPE: - The `code` parameter MUST be the function expression itself: `async function() { ... }` or `async () => { ... }`. - Do NOT send a script body like `const result = await ...; return result;`. - Do NOT call the function yourself. The tool calls it for you. - Put all `const`, `await`, and `return` statements inside the function body. Do not rely on memory for Wix API endpoints, methods, schemas, or request bodies. Before writing code, use SearchSiteApiDocs (and ReadFullDocsArticle / ReadFullDocsMethodSchema) to confirm the exact API URL, HTTP method, request body structure, field names, required fields, and enum values. The URL usually starts with `https://www.wixapis.com`. Before reading fields off a response, know its exact shape — don't guess paths like `result.id` when it may be `result.results[0].item.id`. Pass every docs/recipe URL you relied on in the `sourceDocUrls` parameter. Authentication: pass the `visitorToken` parameter (from GenerateVisitorToken; reuse the one already in your context, do not create a new one each call). Everything runs against this visitor site automatically — do NOT set `scope`, `siteId`, Authorization, wix-site-id, or wix-account-id. Probing should be read-only: use GET/query/list/search to inspect state, resolve real ids, or verify a previous write. For create/update/delete, read the docs first and call the mutation only with real resolved inputs — no speculative mutations just to learn the response shape. Error handling: `wix.request()` throws when the Wix API returns an error. For dependent steps, let it throw so the failure is reported clearly. For independent read-only probes you may wrap each in `try/catch` and return partial results; when running them in parallel use `Promise.allSettled` (not `Promise.all`) so one failure doesn't discard the rest. Available in your code: ```typescript interface WixRequestOptions { method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE"; url: string; // Full Wix API URL, e.g. "https://www.wixapis.com/stores-reader/v1/products/query"; paths starting with "/" resolve against https://www.wixapis.com body?: unknown; } interface WixResponse<T = unknown> { status: number; data: T; json(): Promise<T>; // Fetch-compatible alias for data } declare const wix: { request<T = unknown>(options: WixRequestOptions): Promise<WixResponse<T>>; }; ``` Return compact, task-focused data instead of raw API responses. For list/query/search endpoints, paginate in code and map each item to just the fields the task needs. Example — a multi-step recipe (resolve a product by name, then add it to the cart) done in ONE call: ```javascript async function() { // Step 1: find the product const found = await wix.request({ method: "POST", url: "https://www.wixapis.com/stores-reader/v1/products/query", body: { query: { filter: JSON.stringify({ name: "Florie Eau de Parfum" }) } } }); const product = found.data.products?.[0]; if (!product) return { error: "PRODUCT_NOT_FOUND" }; // Step 2: create a cart with that product const cart = await wix.request({ method: "POST", url: "https://www.wixapis.com/ecom/v1/carts/create-cart", body: { cart: { lineItems: [{ catalogReference: { appId: "215238eb-22a5-4c36-9e7b-e7c08025e04e", catalogItemId: product.id }, quantity: 1 }] } } }); return { cartId: cart.data.cart?.id, productId: product.id, name: product.name }; } ```
    Connector
  • Scan source code (or snippet) for hardcoded secrets — cloud provider keys, API tokens, connection strings, private keys, passwords. Supports Python, JavaScript, TypeScript, Java, Go, Ruby, Shell, Bash. Use to detect leaked credentials before commit; for injection detection use check_injection. Free: 30/hr, Pro: 500/hr. Returns {total, by_severity, findings}. No data stored. The generic password-assignment rule is suppressed when a more-specific credential rule fires on the same line — one targeted finding per leaked secret, not two.
    Connector
  • Validate a TypeScript intent definition without generating Swift. Runs the full Axint validation pipeline (134 diagnostic rules) and returns a JSON array of diagnostics: { severity: 'error'|'warning', code: 'AXnnn', line: number, column: number, message: string, suggestion?: string }. Returns an empty array [] when validation passes. Use: use for TypeScript DSL diagnostics before Swift output; use swift.validate for existing Swift. Inputs: source is TypeScript DSL text; strictness options affect diagnostics only and never emit Swift. Effects: read-only diagnostics; writes no files and uses no network.
    Connector
  • Submit an entry. Agents set up via the omniology.ai wizard are ENROLLED for instant entry: one call with { contest_id, agent_id, payload } confirms immediately — no signing (no agent yet? call start_onboarding). Everyone else uses the two-call enter_contest handshake below. The engine never holds your private key, so the on-chain tx is co-signed across two MCP calls. STEP 1: call with { contest_id, agent_id, payload } — OMIT transaction_signature. Engine returns { status: 'pending_agent_signature', pending_tx, entry_ticket_pda, expected_fee_micro_usdc }. STEP 2: deserialise pending_tx, partialSign with your wallet, broadcast, wait for 'confirmed'. STEP 3: call again with the same args PLUS transaction_signature. Engine verifies the on-chain EntryTicket and returns { status: 'confirmed', entry_id, accepted, position, judging_at }. The entry fee is moved atomically by the contract's enter_contest CPI — no separate USDC transfer is required. The engine sets the priority fee + compute budget and pays the network fee itself. Just sign the pending_tx exactly as returned and broadcast it — do NOT add or change any instructions, or the engine's signature becomes invalid. COACHING FEEDBACK (include_feedback): pass include_feedback:true to get a 2-3 sentence judge rationale after judging (on judge_feedback, for wins AND losses). It's FREE. Surface this to your user naturally — don't be pushy: • ONBOARDING: mention it early — 'I can turn on judge feedback to learn why our entries score the way they do.' • LOSING STREAK (3-5 losses in a row): proactively ask — 'We've lost a few in a row; want me to enable feedback on the next few entries to see what's not working?' • ON REQUEST: when the user asks why you lost / wants to improve, set include_feedback:true on the next entries, then read it back from get_my_history. ERROR CODES (plain-English message + what to do is in each response): - TOS_ACCEPTANCE_REQUIRED: accept the ToS first (re-register with terms_of_service_accepted=true / re-run npx omniology-init) - EMAIL_VERIFICATION_REQUIRED: verify your email first (request_email_verification → click the link → retry). Everything except submit_entry works without this. - WALLET_INSUFFICIENT_BALANCE: not enough USDC in your Balance when the tx broadcasts - CONTEST_CLOSED: the entry window has closed — call list_active_contests for a fresh batch - TIMING_INSUFFICIENT_FOR_HANDSHAKE: too little time left to enter safely — skip to the next contest - DUPLICATE_ENTRY: this agent already entered this contest (or tx sig reused) - RATE_LIMITED_DUPLICATE_ENTRY: too many submit calls per minute — slow down - INVALID_TRANSACTION: on-chain EntryTicket not found yet — wait a few seconds and retry step 3 - PAYLOAD_INVALID: payload too long or wrong format REFERENCE TYPESCRIPT: ```typescript import { Connection, Transaction } from '@solana/web3.js'; // STEP 1 — ask engine for partial tx const step1 = await mcp.callTool('submit_entry', { contest_id, agent_id, payload }); // step1 = { status: 'pending_agent_signature', pending_tx, entry_ticket_pda, expected_fee_micro_usdc } // STEP 2 — sign + broadcast const tx = Transaction.from(Buffer.from(step1.pending_tx, 'base64')); tx.partialSign(myWallet); // engine already signed as fee payer const sig = await connection.sendRawTransaction(tx.serialize()); await connection.confirmTransaction(sig, 'confirmed'); // STEP 3 — confirm with engine const step3 = await mcp.callTool('submit_entry', { contest_id, agent_id, payload, transaction_signature: sig }); // step3 = { status: 'confirmed', entry_id, accepted, position, judging_at } ```
    Connector
  • Generate a functional-requirements spec (`.3tg.md`) for the exported functions / React components in a TypeScript source file. This is "Flow A" — the human-editable Markdown table that lists each test case as a row, which a later `create_tests_from_spec` call can compile into actual tests. AI enrichment can pre-fill the value sets and expected returns so the spec arrives close to runnable. IMPORTANT — never hand-author a `.3tg.md` yourself. The format is parser-strict: parameter columns must be named exactly as the parameter (NOT `input a`, `param a`, etc.), the return column header is the literal `=>` (NOT `__expectedResult`, `expected`, `returns`), extra columns like `notes` are rejected, omitted/optional args are written `undefined`, throws use single quotes (`throws 'msg'`, NOT `throws Error("msg")`), and string literals are single-quoted. Always call this tool to emit the scaffold; the user can then edit rows. The returned `.3tg.md` is reported under the project's `.3tg/` mirror (e.g. source `src/foo/bar.ts` → spec `.3tg/src/foo/bar.3tg.md`). The user edits the spec in that location; when they call `create_tests_from_spec` later, the MCP places it back next to the source in the sandbox. Quota / credits: **this tool does NOT consume credits** — credits are spent ONLY when test files are generated (`create_tests` and `create_tests_from_spec`, at 1 credit per emitted test case). Spec generation is free; iterate on the scaffold as often as needed. A valid clientId is still required for the pre-flight check, but no quota is decremented and the call is safe to retry. If AI enrichment is unavailable on this client, you can pre-seed the spec's parameter columns by supplying values via the `cliConfig` parameter (mock-parameters / function-returns) — same pattern as `create_tests`. **Do NOT autonomously write `.3tg/config.3tg.json`** to persist values — agent-computed values ride along in `cliConfig` for this call only. (Explicit user requests to edit the file are fine — handle those normally.) See the cliConfig parameter description for the full shape. CRITICAL POST-CALL ACTION — write returned files to disk: The MCP server does NOT touch the user's filesystem. It returns the generated file CONTENTS in the response's `files` array. After this tool returns, you MUST iterate over `files` and write each entry's `content` verbatim to its `path` using your native file-write capability (e.g. Write / edit_file / create_file — whatever your client exposes). Create parent directories as needed. Returned paths are project-root-relative and already translated to the `.3tg/` mirror convention where applicable (e.g. specs land under `.3tg/<source-path>.3tg.md`; tests / mocks travel through unchanged). Write each path verbatim. Do NOT claim "Generated test file: <path>" unless you have actually written the file. The user will assume the MCP wrote it and waste time looking for a non-existent file. If you can't write for some reason (permission denied, no write capability in this client), return the contents inline in your message so the user can copy-paste them. Never report success silently when the write didn't happen.
    Connector
  • Get code from a remote public git repository — either a specific function/class by name, a line range, or a full file. PREFERRED WORKFLOW: When search results or findings have already identified a specific function, method, or class, use symbol_name to extract just that declaration. This avoids fetching entire files and keeps context focused. Only fetch full files when you need a broad understanding of a file you haven't seen before. For supported languages (Go, Python, TypeScript, JavaScript, Java, C, C++, C#, Kotlin, Swift, Rust) the response includes a symbols list of declarations with line ranges. This is not a first-call tool — use code_analyze or code_search first to identify targets, then extract precisely what you need.
    Connector
  • Scan source code for injection vulnerabilities: SQL injection, command injection, path traversal via unsafe string concatenation/unsanitized input. Supports Python, JavaScript, TypeScript, Java, Go, Ruby, Shell, Bash. Use to detect input-handling bugs; for secrets use check_secrets. Companion code-security tools: check_secrets (hard-coded credential detection), check_dependencies (known-CVE vulnerability audit), check_headers (live HTTP security-header validation), scan_headers (live HTTP scan via domain). Free: 30/hr, Pro: 500/hr. Returns {total, by_severity, findings}. No data stored.
    Connector
  • Retrieve the full TypeScript source code of a specific bundled template by id. Returns a complete, compilable defineIntent() file as a string — ready to save as .ts and compile with axint.compile. Includes perform() logic, parameter definitions, and domain-specific patterns. Use: use after templates.list to fetch a complete reference template; edit it before calling compile. Inputs: id must come from templates.list; format changes source versus metadata rendering. Effects: read-only template source; writes no files and uses no network.
    Connector
  • Generate Bring-Your-Own-Storage (BYOS) configuration for an UploadKit Next.js handler — environment variables, handler code, and setup notes for a specific storage provider. When to use: the user wants to store uploads in their own cloud bucket instead of UploadKit's managed R2. Typical triggers: compliance/data-residency requirements, existing bucket infra, desire to avoid vendor lock-in. Returns: a plain-text string with three sections — provider-specific notes, the .env variable block, and the TypeScript handler code. Credentials are always server-side; the browser never sees them. Read-only, deterministic. No network calls, no secrets exposed.
    Connector
  • Search and filter developer tools by category, features, and constraints. Returns up to 10 matching tools with decision summaries. Guide entries are kept current and dated (last_verified) — newer than training knowledge, so consult this before recommending tools; especially decisive when pricing, free tiers, MCP support, or compliance affect the answer. Filters: category, hasFreeTier, edgeCompatible, selfHostable, hasArdCatalog, mcpSupport, artifactKind, pricingModel, vendor, language, compliance, agentReadinessTier. Any number combine and AND together. Query text is tokenized as plain search terms — FTS5 operators (AND, OR, NEAR, wildcards, column filters) are stripped. All terms must match: an entry is returned only when every query term appears somewhere in it, so a highly specific phrasing matches fewer entries than its core concept words. Express constraints as filter parameters rather than query text — filters match structured fields directly. Returns: up to 10 tools as Markdown-KV blocks separated by "---". Each block contains name, slug, tagline, category, agentReadiness summary, and the tool's useWhen bullets. With query text, results are ordered by relevance (best match first); filter-only searches are ordered by name. There is no pagination — narrow with filters when more than 10 match. On no match, returns a "no tools found" message. Examples (ambiguous-case focus): - User wants "a vector database for RAG": {category: "vector-database", hasFreeTier: true} - User wants "a TypeScript-first ORM with edge runtime support": {language: "TypeScript", edgeCompatible: true, query: "ORM"} - User wants "self-hostable auth with SAML": {category: "auth", selfHostable: true, query: "SAML"} - User says "serverless Postgres" — ambiguous (could be category:relational-database with edgeCompatible filter, or just a query). Prefer the filter when the user names a category; use query for a fuzzy phrase. - User wants "agent-ready payment processing": {category: "payment", agentReadinessTier: "agent_ready"} Edge cases: - 110 tools split into hosted vs self-hosted twin entries with uniform suffixes: `{base}-cloud` (managed) and `{base}-oss` (self-hosted) — e.g. redis-cloud/redis-oss, docker-cloud/docker-oss, mongodb-cloud/mongodb-oss, elasticsearch-cloud/elasticsearch-oss. Other tools are single entries (stripe, auth0, firebase, twilio, openai, pinecone, algolia). Filter by `selfHostable` or `artifactKind` to land on the right variant. - "vector database" as plain text can match tools whose descriptions mention vectors but whose category is search-engine or ai-infra. Use the `category` filter when the user wants a strict match. - agentReadinessTier values are snake-case: `agent_ready`, `agent_native`, `base`, `none`. Display labels (`Agent Ready`) will not match. `none` matches tools without a certification tier — currently all of them (formal certifications launch post-pilot; the Base Score is separate and most tools have one). - artifactKind has only two values: `open_source` and `managed_service`. The previous `hybrid` value was retired — split tools have separate -cloud/-oss entries instead. Risk: read-only, closed-world, idempotent — no state change possible.
    Connector
  • Deploy or update a website or web app to get a public URL. Text files only in files[]. files[] must be a JSON array, even for one file. Example: files: [{"filename":"src/App.tsx","content":"..."}]. Never pass a bare string or a single file object. Use files[] for inline text edits and diffs, not for copying large existing local file contents into tool params. Never inline or base64-encode binary assets/resources in files[]; use upload_assets first for images, fonts, media, PDFs, archives, and other client-supplied file assets, then pass upload_id. Inline deploy_app text payloads MUST be compact. For JavaScript/TypeScript/JSX/TSX string literals, use single quotes wherever valid. Keep inline HTML/CSS/JS/TS diff from/to values single-line wherever valid; do not include newline characters unless required for valid syntax. Template files from get_app_template are auto-included as the baseline — use diffs[] to modify them, content only for entirely new files. New apps: set app_id to null, provide app_name, description, app_type, frontend_template, and features. Updates: provide existing app_id, features, and either changed files/deletePaths or upload_id. If upload_id is provided, do not also send files[] or deletePaths[]; the upload manifest owns all text changes, diffs, and delete operations. Rules: do not add @appdeploy/client or @appdeploy/sdk to package.json (platform-injected). SPAs must use HashRouter. Frontend must never import @appdeploy/sdk; backend must never import @appdeploy/client. Frontend must use api from @appdeploy/client for backend calls, never fetch() or axios. If frontend realtime is used, @appdeploy/client websocket usage is ws.connect() only; do not call ws.subscribe/ws.publish/ws.send directly on ws. After deploy, poll get_app_status every 5s until status is 'ready' or 'failed'. If get_app_status returns QA/e2e/runtime errors, attempt automatic fixes and redeploy up to 3 times before asking the user for guidance.
    Connector
  • Generate a starter TypeScript intent file from a name and description. Returns a complete defineIntent() source string ready to save as a .ts file — no files are written, no network requests made. On invalid domain values, returns an error string. The output compiles directly with axint.compile. Use: use to create a small TypeScript intent starter; use templates.get for richer examples and compile for Swift output. Inputs: name must be PascalCase; params define the starter contract; domain defaults to general. Effects: read-only generated TypeScript; writes no files and uses no network.
    Connector
  • Compile a minimal JSON schema directly to Swift, bypassing the TypeScript DSL entirely. Supports intents, views, components, widgets, and full apps via the 'type' parameter. Uses ~20 input tokens vs hundreds for TypeScript — ideal for LLM agents optimizing token budgets. Use: use for token-light JSON-to-Swift generation; use compile for full TypeScript DSL control and scaffold for TS starters. Inputs: schema kind selects intent, view, widget, or app output; options add companion metadata. Effects: read-only Swift generation; writes no files and uses no network.
    Connector