Cracked

Uma chave para 63.577 ferramentas de agente: scrapers, busca, dados, modelos de IA. Pague por chamada, execuções com falha gratuitas. MCP + REST.

Documentação

Atualizado em 2 de setembro de 2026 · testado com o protocolo MCP 2025-06-18 · por Cracked Engineering

Servidor MCP

O Cracked expõe um servidor MCP remoto via HTTP Streamable em https://cracked.ai/mcp. Duas formas de autenticação: OAuth 2.1 (entre com sua conta Cracked pelo Claude.ai, Claude Desktop, ChatGPT, Cursor) ou um cabeçalho bearer API key (Claude Code, Codex, OpenCode, scripts).

Ferramentas expostas

As ferramentas genéricas estão sempre registradas. Além delas, cada capacidade de smart run está disponível como sua própria ferramenta tipada (id da capacidade com underscores: instagram-profile vira instagram_profile), para que um cliente possa chamar weather_forecast({latitude, longitude}) diretamente em vez de descobrir e inspecionar primeiro.

FerramentaArgumentosFinalidade
discover_toolsquery, limit?, live_only?Busca em linguagem natural com preço, saúde e disponibilidade.
inspect_toolprovider, endpointSchema, preço, saúde, documentação.
run_toolprovider, endpoint, input, wait?Executa e cobra. wait:false para scrapers longos.
run_capabilitycapability, input, wait?Smart run por id de capacidade; faz fallback entre provedores.
list_capabilitiesid?Ids de capacidade, schemas de entrada, candidatos ranqueados. Grátis.
get_runrun_id, wait_seconds?Consulta uma execução assíncrona.
get_balanceSaldo do workspace em USD.
create_checkout_linkamount_usd, ref?, promo?, success_url?Gera um link de pagamento por cartão para entregar ao seu dono. Grátis até o pagamento.
recruit_agentagent_name?, task?Prompt de onboarding para outro agente com seu link de indicação embutido (registro, primeira execução, fluxo de reivindicação). Grátis.
<capability>os campos de entrada da capacidadeUma ferramenta por capacidade, ex.: web_search, instagram_profile, weather_forecast. Retorna a saída normalizada primeiro e depois um resumo compacto da execução (routedTo, status, cost, runId).

Conjuntos de ferramentas

164 ferramentas de capacidade é mais do que alguns clientes listam confortavelmente, então o conjunto é escolhido com um parâmetro de consulta tools na URL do servidor. Todo o resto (autenticação, metadados OAuth, cobrança) é idêntico.

URLFerramentasUse quando
https://cracked.ai/mcp ou ?tools=topgenéricas + 40 capacidades mais usadasPadrão. Instagram, TikTok, YouTube, X, LinkedIn, Google Maps, Amazon, busca e scraping web, enriquecimento, clima, ações, cripto, geração de imagem e fala, transcrição, chat LLM.
https://cracked.ai/mcp?tools=allgenéricas + todas as 164 capacidadesAgentes que escolhem ferramentas por nome e schema e conseguem manter uma lista longa de ferramentas.
https://cracked.ai/mcp?tools=coreapenas genéricasClientes com orçamento pequeno de ferramentas; use run_capability e run_tool.

O identificador de recurso protegido OAuth é https://cracked.ai/mcp para os três; clientes conectando a /mcp?tools=all descobrem os mesmos metadados em /.well-known/oauth-protected-resource/mcp e fazem login uma única vez.

Exemplo de entrada tools/list para uma ferramenta de capacidade:

{
  "name": "weather_forecast",
  "title": "Weather forecast",
  "description": "Current conditions plus daily forecast for coordinates. Use geocode first for a city name. Price: from $0.002/call via Open-Meteo Weather + $0.001 platform fee, billed to the workspace balance. Smart run: Cracked picks the best live tool for \"weather-forecast\", maps the input and falls back to the next provider on failure (1 live).",
  "inputSchema": { "type": "object", "properties": { "latitude": { "type": "number", "description": "Latitude" }, "longitude": { "type": "number", "description": "Longitude" }, "days": { "type": "number", "description": "Forecast days 1-16" }, "units": { "type": "string", "description": "celsius or fahrenheit" } }, "required": ["latitude", "longitude"] }
}

Chamá-la retorna a saída primeiro e depois um resumo compacto da execução:

{
  "output": { "timezone": "America/Chicago", "current": { "temperature_2m": 91.6, "relative_humidity_2m": 41, ... }, "daily": { ... } },
  "run": { "capability": "weather-forecast", "status": "COMPLETED", "routedTo": { "provider": "open-meteo", "endpoint": "/forecast" }, "httpStatus": 200, "runId": "b637d650-...", "totalUsd": 0.003, "durationMs": 1107, "attempts": 1, "fallbackUsed": false, "tried": [ ... ] },
  "hints": { "capability": "GET /v1/capabilities?id=weather-forecast" }
}

Claude.ai e Claude Desktop (OAuth)

Configurações → Conectores → Adicionar conector personalizado. Nome Cracked, URL https://cracked.ai/mcp (ou https://cracked.ai/mcp?tools=all). O Claude descobre nosso servidor OAuth, registra-se, envia você para a tela de consentimento do Cracked, e você escolhe o workspace a ser cobrado. Os tokens duram 30 dias e são renovados automaticamente. Revogue pelas chaves de API.

ChatGPT

Configurações → Conectores → Criar. URL de conexão https://cracked.ai/mcp (ou https://cracked.ai/mcp?tools=all para expor todas as capacidades), autenticação OAuth. Mesmo fluxo de consentimento. O ChatGPT lista cada capacidade como uma ação separada, então o conjunto padrão mantém a página do conector legível.

Claude Code

# default: generic tools + 40 most-used capabilities as typed tools
claude mcp add --transport http cracked https://cracked.ai/mcp --header "Authorization: Bearer ck_live_..."
# every capability as a tool
claude mcp add --transport http cracked "https://cracked.ai/mcp?tools=all" --header "Authorization: Bearer ck_live_..."
# or let Claude Code run the OAuth flow:
claude mcp add --transport http cracked https://cracked.ai/mcp

Cursor

{ "mcpServers": { "cracked": { "url": "https://cracked.ai/mcp?tools=all", "headers": { "Authorization": "Bearer ck_live_..." } } } }

Um clique: cracked.ai/install tem um deep link do Cursor para o conjunto padrão e um para tools=all.

Codex

codex mcp add cracked --url https://cracked.ai/mcp --header "Authorization: Bearer ck_live_..."

OpenCode

{ "mcp": { "cracked": { "type": "remote", "url": "https://cracked.ai/mcp", "enabled": true, "headers": { "Authorization": "Bearer ck_live_..." } } } }

Ferramentas nativas para os SDKs da OpenAI e da Anthropic (sem MCP)

As mesmas definições de ferramentas são servidas como JSON simples em GET https://cracked.ai/v1/capabilities/tools (grátis, sem autenticação, CORS *, cache de uma hora). Cole o array em tools=[...] e depois execute cada chamada que o modelo fizer com POST https://cracked.ai/v1/run {"capability", "input"}. O nome da ferramenta é o id da capacidade com underscores; /v1/run aceita qualquer grafia.

ConsultaRetorna
?format=openai (padrão)[{ type: "function", function: { name, description, parameters } }]
?format=anthropic[{ name, description, input_schema }]
?format=mcp[{ name, title, description, inputSchema }], o que /mcp lista
&set=top (padrão) / &set=all40 capacidades mais usadas / todas as 164

SDK da OpenAI (Python)

import json, os, requests
from openai import OpenAI

CRACKED = "https://cracked.ai"
H = {"Authorization": f"Bearer {os.environ['CRACKED_API_KEY']}", "content-type": "application/json"}
tools = requests.get(f"{CRACKED}/v1/capabilities/tools?format=openai&set=top").json()

def run_capability(name, arguments):
    r = requests.post(f"{CRACKED}/v1/run", headers=H, json={"capability": name, "input": arguments}, timeout=300).json()
    return r.get("output") if r.get("status") == "COMPLETED" else {"error": r.get("status"), "detail": r.get("providerResponse"), "attempts": r.get("attempts")}

client = OpenAI()
messages = [{"role": "user", "content": "How many followers does @nike have on Instagram, and what is the weather in Austin?"}]
while True:
    resp = client.chat.completions.create(model="gpt-4.1", messages=messages, tools=tools)
    msg = resp.choices[0].message
    messages.append(msg)
    if not msg.tool_calls:
        print(msg.content); break
    for call in msg.tool_calls:
        out = run_capability(call.function.name, json.loads(call.function.arguments))
        messages.append({"role": "tool", "tool_call_id": call.id, "content": json.dumps(out)})

SDK da Anthropic (Python)

import json, os, requests
import anthropic

CRACKED = "https://cracked.ai"
H = {"Authorization": f"Bearer {os.environ['CRACKED_API_KEY']}", "content-type": "application/json"}
tools = requests.get(f"{CRACKED}/v1/capabilities/tools?format=anthropic&set=top").json()

def run_capability(name, arguments):
    r = requests.post(f"{CRACKED}/v1/run", headers=H, json={"capability": name, "input": arguments}, timeout=300).json()
    return r.get("output") if r.get("status") == "COMPLETED" else {"error": r.get("status"), "detail": r.get("providerResponse"), "attempts": r.get("attempts")}

client = anthropic.Anthropic()
messages = [{"role": "user", "content": "How many followers does @nike have on Instagram, and what is the weather in Austin?"}]
while True:
    resp = client.messages.create(model="claude-opus-5", max_tokens=16000, tools=tools, messages=messages)
    messages.append({"role": "assistant", "content": resp.content})
    if resp.stop_reason != "tool_use":
        print(next(b.text for b in resp.content if b.type == "text")); break
    results = []
    for block in resp.content:
        if block.type == "tool_use":
            out = run_capability(block.name, block.input)
            results.append({"type": "tool_result", "tool_use_id": block.id, "content": json.dumps(out)})
    messages.append({"role": "user", "content": results})

SDK da Anthropic (TypeScript)

import Anthropic from "@anthropic-ai/sdk";

const CRACKED = "https://cracked.ai";
const H = { Authorization: \`Bearer ${process.env.CRACKED_API_KEY}\`, "content-type": "application/json" };
const tools = (await (await fetch(\`${CRACKED}/v1/capabilities/tools?format=anthropic&set=top\`)).json()) as Anthropic.Tool[];

async function runCapability(name: string, input: unknown) {
  const r = await (await fetch(\`${CRACKED}/v1/run\`, { method: "POST", headers: H, body: JSON.stringify({ capability: name, input }) })).json();
  return r.status === "COMPLETED" ? r.output : { error: r.status, detail: r.providerResponse, attempts: r.attempts };
}

const client = new Anthropic();
const messages: Anthropic.MessageParam[] = [{ role: "user", content: "Top 5 news stories about peptides this week, with URLs." }];
for (;;) {
  const resp = await client.messages.create({ model: "claude-opus-5", max_tokens: 16000, tools, messages });
  messages.push({ role: "assistant", content: resp.content });
  if (resp.stop_reason !== "tool_use") { console.log(resp.content.find((b) => b.type === "text")?.text); break; }
  const results: Anthropic.ToolResultBlockParam[] = [];
  for (const block of resp.content) if (block.type === "tool_use") results.push({ type: "tool_result", tool_use_id: block.id, content: JSON.stringify(await runCapability(block.name, block.input)) });
  messages.push({ role: "user", content: results });
}

Scrapers longos: envie "wait": false para /v1/run, receba HTTP 202 com um runId e depois consulte GET /v1/runs/{runId}?wait=30. Execuções com status diferente de 2xx nunca são cobradas. Veja Smart run para as regras de roteamento e a referência da API para todos os campos.

Detalhes do OAuth

  • Descoberta: https://cracked.ai/.well-known/oauth-authorization-server e https://cracked.ai/.well-known/oauth-protected-resource/mcp.
  • Registro dinâmico de cliente (RFC 7591) em /oauth/register; sem configuração manual de cliente.
  • Código de autorização com PKCE (S256), tokens de atualização, revogação em /oauth/revoke.
  • Escopos: tools:discover, tools:run, wallet:read, offline_access.
  • Um token de acesso é uma chave com escopo de workspace (ck_oauth_…) que também funciona na API HTTP.

Verifique pelo shell

curl -s "https://cracked.ai/mcp?tools=all" -H "Authorization: Bearer ck_live_..." -H "content-type: application/json" -H "accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
# call a capability tool directly
curl -s https://cracked.ai/mcp -H "Authorization: Bearer ck_live_..." -H "content-type: application/json" -H "accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"weather_forecast","arguments":{"latitude":30.27,"longitude":-97.74}}}'