Edge API
Edge finds the best expert skill for the task your agent is about to do, and loads it for that task.
Every endpoint is free: $0 per call. No key, no account.
JSON API
Two calls, JSON in and JSON out: find the skill for a task, then load its instructions. Base URL https://getedge.cc/api/v1.
| Endpoint | What it does |
|---|---|
POST /find_skill | Ranks public agent skills for the task and returns only security-reviewed ones. |
POST /use_skill | Returns one skill's full instructions for this task. Nothing is installed. |
GET /openapi.json | OpenAPI 3.1 schema for both, getedge.cc/api/v1/openapi.json. |
Auth
- None needed. Send
Content-Type: application/jsonand a JSON body. - Optional Edge key:
Authorization: Bearer edge_.... Get one at getedge.cc/pricing (no card). It links calls to the key's activity and ratings. The key is never logged; a wrong key runs as anonymous.
find_skill
| Field | Type | What it is |
|---|---|---|
query | string, required | The task in plain words, 3 to 500 characters. |
keywords | string | 2 to 8 words a skill for this would be named with. |
limit | integer | 1 to 5 skills, default 5. |
curl -s https://getedge.cc/api/v1/find_skill \
-H 'Content-Type: application/json' \
-d '{"query":"write a postgres migration that adds an index without locking the table",
"keywords":"postgres migration","limit":3}'
{
"request_id": "ead4trhe",
"skills": [
{
"source": "impertio-studio/postgresql-claude-skill-package",
"skill": "postgres-impl-zero-downtime-migrations",
"description": "Use when altering a table on a live production database, adding index...",
"fit_score": 0.99,
"recommended": true,
"security_state": "reviewed",
"installs": 7,
"url": "https://raw.githubusercontent.com/impertio-studio/postgresql-claude-skill-package/70c61aa.../skills/source/postgres-impl/postgres-impl-zero-downtime-migrations/SKILL.md"
},
{
"source": "affaan-m/ecc",
"skill": "database-migrations",
"description": "Safe, reversible database migration patterns: forward-only production...",
"fit_score": 0.99,
"recommended": false,
"security_state": "reviewed",
"installs": 5700,
"url": "https://raw.githubusercontent.com/affaan-m/ecc/d3b8a3e.../skills/database-migrations/SKILL.md"
},
"..."
],
"recommendation": {
"strength": "pick",
"source": "impertio-studio/postgresql-claude-skill-package",
"skill": "postgres-impl-zero-downtime-migrations",
"text": "Load impertio-studio/postgresql-claude-skill-package@postgres-impl-zero-downtime-migrations first with use_skill and this request_id, then apply it. The others are alternatives."
}
}
Takes 3 to 15 seconds. fit_score is Edge's fit check for this task (0 to 1). recommendation.strength is pick (load the named skill first), shortlist (load one only if it clearly fits), none or routine (no specialist skill needed). Keep request_id, source and skill for use_skill.
use_skill
| Field | Type | What it is |
|---|---|---|
source | string | Repository from find_skill, owner/repo. |
skill | string, required | Skill name from find_skill. |
request_id | string | From find_skill. |
version | string | Optional: a scanned version to pin. |
curl -s https://getedge.cc/api/v1/use_skill \
-H 'Content-Type: application/json' \
-d '{"source":"impertio-studio/postgresql-claude-skill-package",
"skill":"postgres-impl-zero-downtime-migrations","request_id":"ead4trhe"}'
{
"source": "impertio-studio/postgresql-claude-skill-package",
"skill": "postgres-impl-zero-downtime-migrations",
"security_state": "reviewed",
"request_id": "ead4trhe",
"instructions": "---\nname: postgres-impl-zero-downtime-migrations\ndescription: >\n Use when altering a table on a live production databas..."
}
instructions is the full SKILL.md and its supporting files (35,600 characters here). Give it to your agent as instructions for this task.
Errors and limits
Errors are JSON, {"error": "..."}, and the message says what to do next.
| Status | Meaning |
|---|---|
400 | Invalid input. |
403 | The skill failed Edge's security checks, so it will not load. |
404 | Not loadable or not matched. Try another skill from the same search. |
409 | Security review still running. Retry after the Retry-After seconds. |
429 | Too many requests from one address (the same limit as the MCP endpoint). Retry after Retry-After. |
From code
JavaScript (Node 18+):
const EDGE = "https://getedge.cc/api/v1";
const headers = { "Content-Type": "application/json" };
if (process.env.EDGE_KEY) headers.Authorization = `Bearer ${process.env.EDGE_KEY}`;
const call = async (path, body) => {
const res = await fetch(`${EDGE}/${path}`, { method: "POST", headers, body: JSON.stringify(body) });
const json = await res.json();
if (!res.ok) throw new Error(json.error);
return json;
};
const found = await call("find_skill", { query: "write release notes from a git log", keywords: "release notes" });
const pick = found.skills.find(s => s.recommended) ?? found.skills[0];
if (pick) {
const { instructions } = await call("use_skill", { source: pick.source, skill: pick.skill, request_id: found.request_id });
// give `instructions` to your agent for this task
}
Python (requests):
import os, requests
EDGE = "https://getedge.cc/api/v1"
headers = {"Authorization": "Bearer " + os.environ["EDGE_KEY"]} if os.environ.get("EDGE_KEY") else {}
def call(path, body):
res = requests.post(f"{EDGE}/{path}", json=body, headers=headers, timeout=60)
data = res.json()
if not res.ok:
raise RuntimeError(data["error"])
return data
found = call("find_skill", {"query": "write release notes from a git log", "keywords": "release notes"})
pick = next((s for s in found["skills"] if s["recommended"]), found["skills"][0] if found["skills"] else None)
if pick:
instructions = call("use_skill", {"source": pick["source"], "skill": pick["skill"],
"request_id": found["request_id"]})["instructions"]
For agents: MCP
Agents that speak MCP connect to the same tools directly. Same ranking, same security gate, also free.
POST https://getedge.cc/mcp: MCP Streamable HTTP (protocol 2025-06-18), JSON-RPC 2.0 in the request body.
| Header | Value |
|---|---|
Content-Type | application/json |
Accept | application/json, text/event-stream (both, or the server answers 406) |
Authorization | Bearer edge_... (optional) |
- No initialize needed. A single
tools/listortools/callrequest works on its own. MCP client libraries that sendinitializefirst also work. - Response format: server-sent events, one
data: {...}line holding the JSON-RPC response.result.content[0].textis plain text written for an agent.
find_skill and use_skill
curl -s https://getedge.cc/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"find_skill",
"arguments":{"query":"write a postgres migration that adds an index without locking the table",
"keywords":"postgres migration"}}}' \
| sed -n 's/^data: //p' | jq -r '.result.content[0].text'
use_skill takes skill, source and request_id from that answer. After the task, rate_skill reports how the skill did; ratings feed Edge's ranking:
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"rate_skill",
"arguments":{"request_id":"t9wbx3ma","outcome":"helped","score":8,
"reason":"Concurrent index pattern and lock_timeout settings applied as written."}}}
All tools
curl -s https://getedge.cc/mcp -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | sed -n 's/^data: //p' | jq -r '.result.tools[].name'
Returns each tool's name, description and JSON input schema: find_skill, use_skill, rate_skill, scan_skill, report_issue, star_skill, list_starred, my_activity, find_tool, use_tool and more. find_tool and use_tool run live data tools (LinkedIn, Instagram, X and search data), with beta limits: 60 calls per hour anonymous, 600 with a key.
Any MCP client library (TypeScript or Python SDK, Streamable HTTP transport) can point at the same URL.