docs

AgenticSource API.

One MCP connection, 13 tools, 16 verified upstream sources. License-aware results on every call. Drops into Claude, ChatGPT, Cursor, Codex, and any MCP-compatible agent in 30 seconds.

v1.0.0 JSON-RPC 2.0 over HTTP OAuth or API key MCP spec compatible

Quickstart.

Four steps to a working integration. Total time: about 30 seconds.

1. Sign up

Magic-link signup at agenticsource.dev/signup. Email only, no credit card required for the free tier.

2. Get your endpoint

Every account uses the same MCP endpoint:

https://agenticsource.dev/mcp

3. Configure your agent

Drop the MCP URL into your agent's configuration. For managed clients (Claude, ChatGPT, Codex) authenticate via OAuth. For local clients (Cursor, Continue, Cline, Zed, Windsurf) paste your API key. Full client-specific setup in Client setup.

4. Call any tool

Your agent now has 13 new tools available. The agent-side call (in pseudocode your AI client handles for you):

await mcp.search_images({
  query: "team meeting modern office",
  orientation: "landscape",
  commercial_safe_only: true
})

Under the hood, the MCP client sends a JSON-RPC 2.0 request over HTTP. If you're integrating directly without an MCP client, the wire format is:

POST https://agenticsource.dev/mcp
Authorization: Bearer sk_as_...
Content-Type: application/json

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_images",
    "arguments": {
      "query": "team meeting modern office",
      "orientation": "landscape",
      "commercial_safe_only": true
    }
  }
}
Tip Use tools/list to discover all available tools and their schemas dynamically. Most MCP-compatible clients do this automatically on connection.

Authentication.

Two paths supported. Pick whichever your client speaks.

OAuth 2.0 + PKCE

For managed AI clients (Claude, ChatGPT, Codex). Standard OAuth 2.0 with PKCE per RFC 7636 and discovery metadata per RFC 8414.

  • Discovery URL: https://agenticsource.dev/.well-known/oauth-authorization-server
  • Authorization endpoint: /oauth/authorize
  • Token endpoint: /oauth/token
  • Scopes: tools:read, tools:write

Your client handles the handshake. You click "Connect AgenticSource" inside the AI client; the magic-link flow signs you up if needed; the AI client receives an access token; from then on, all MCP calls are authenticated by header.

API key (Bearer)

For Cursor, scripts, and local MCP clients that don't support OAuth. Generate a key in the dashboard (agenticsource.dev/dashboard), then send it as a Bearer header:

Authorization: Bearer sk_as_XXXXXXXXXXXXXXXXXXXXXXXX

API keys are scoped to a single account and rotate freely. The dashboard supports up to 10 active keys per account.

Security note API keys are stored hashed at rest using bcrypt. The plaintext key is shown only once at creation time; you can't retrieve it later, only rotate or revoke it.

Client setup.

Drop-in configuration for the eight officially-tested MCP clients.

Claude
Settings → Connectors → "Add custom connector" → paste https://agenticsource.dev/mcp → click "Connect". OAuth handshake completes automatically.
ChatGPT
Settings → Beta → Custom GPTs / Tools → "Add MCP server" → paste the endpoint → authenticate.
Cursor
Cursor Settings → MCP → "Add new MCP server" → Type: HTTP → URL: https://agenticsource.dev/mcp → Auth header: Bearer sk_as_...
Codex
Edit ~/.codex/config.toml, add: [mcp_servers.agenticsource] url = "https://agenticsource.dev/mcp" auth = "bearer sk_as_..."
Continue.dev
In ~/.continue/config.json add the server to mcpServers with the endpoint URL and API key as the Authorization header.
Cline
VS Code settings → Cline → MCP servers → add HTTP server with the endpoint and Bearer token.
Zed
Zed Settings → AI → MCP servers → add server with the endpoint URL and Bearer token.
Windsurf
Windsurf Settings → Cascade → MCP → "Add server" → paste the endpoint and authenticate.

Tools.

13 MCP tools across 11 visible categories plus two legacy categories still callable through the API.

search_images 7 sources

Search across Unsplash, Pexels, Pixabay, OpenVerse, Wikimedia, NASA, and Met Museum. ~800M+ images. License metadata on every result.

Parameters
NameTypeDefaultDescription
querystringrequiredSearch query, freeform text.
orientationstring"any""landscape", "portrait", "square", or "any".
colorstringnullHex color or descriptor (e.g. "blue", "#3B82F6").
commercial_safe_onlybooleanfalseFilter out CC-BY-NC and other non-commercial licenses.
include_open_culturebooleantrueInclude results from Wikimedia, NASA, and Met Museum.
limitinteger35Max results across all sources (1-50).
Response
{
  "count": 35,
  "results": [{
    "source": "unsplash",
    "id": "...",
    "url_full": "https://...",
    "url_thumbnail": "https://...",
    "photographer": "J. Doe",
    "photographer_url": "https://...",
    "license_name": "Unsplash License",
    "license_url": "https://...",
    "commercial_use": true,
    "attribution_required": false,
    "width": 5472,
    "height": 3648
  }],
  "sources_responded": ["unsplash", "pexels", "pixabay", "openverse"]
}

search_videos 3 sources

Pexels, Pixabay, Coverr. ~150k HD/4K clips with preview and download MP4 URLs.

Parameters
NameTypeDefaultDescription
querystringrequiredSearch query.
min_durationinteger0Minimum duration in seconds.
max_durationintegernullMaximum duration in seconds.
resolutionstring"any""4k", "hd", "sd", or "any".
commercial_safe_onlybooleanfalseFilter for commercial-safe results.
limitinteger20Max results (1-50).

search_audio 2 sources

Freesound (~600k CC sounds) and Pixabay Music. Ambient, SFX, music tracks.

Parameters
NameTypeDefaultDescription
querystringrequiredSearch query.
kindstring"any""sfx", "music", "ambient", "voice", or "any".
sourcesstring[]["freesound","pixabay"]Which sources to query.
commercial_safe_onlybooleanfalseFilter for commercial use.
limitinteger20Max results (1-50).

search_icons 200k+ icons

Iconify aggregator across 150+ libraries: Lucide, Heroicons, Phosphor, Tabler, Material, FontAwesome, and more.

Parameters
NameTypeDefaultDescription
querystringrequiredIcon name or descriptor.
prefixstringnullRestrict to a library prefix (e.g. "lucide").
stylestring"any""outline", "solid", "duotone", or "any".
limitinteger24Max results (1-100).

search_illustrations 2 sources

unDraw static SVG illustrations and Lottiefiles animations. ~300k+ assets, mostly free for commercial use.

Parameters
NameTypeDefaultDescription
querystringrequiredSearch query or theme.
kindstring"any""static" (unDraw), "animated" (Lottie), or "any".
colorstringnullHex color to recolor unDraw illustrations (ignored for Lottie).
limitinteger20Max results (1-50).

get_color_palette generative

Colormind generative palettes and The Color API scheme builder. Seedable, deterministic.

Parameters
NameTypeDefaultDescription
seedstringnullHex color or descriptor (e.g. "fintech", "#3B82F6").
modestring"analogous""analogous", "complementary", "triadic", "monochromatic".
lengthinteger5Number of colors to return (3-8).

search_fonts 1,800+ families

Google Fonts and FontShare. Returns embed CSS, weights/variants, subsets, license info.

Parameters
NameTypeDefaultDescription
querystringnullFont name or category.
categorystring"any""sans-serif", "serif", "monospace", "display", "handwriting".
weightsinteger[]nullRequired weights (e.g. [400, 700]).
limitinteger20Max results.

search_3d_assets Poly Haven

~2,000+ CC0 3D models, HDRIs, and PBR textures. All public-domain, all commercial-use safe.

Parameters
NameTypeDefaultDescription
querystringrequiredSearch query.
kindstring"any""hdri", "texture", "model", or "any".
limitinteger15Max results.

search_mockups 25+ templates

Curated mockup templates. Phones, laptops, apparel, packaging, billboards, social frames. Returns template URL plus a screen_bbox to composite into.

Parameters
NameTypeDefaultDescription
categorystringrequired"device", "apparel", "packaging", "outdoor", "social".
devicestringnullSpecific device (e.g. "iphone-15-pro", "macbook-pro-16").
backgroundstring"transparent""transparent" or color name.

search_motion 5,000+ motion

Lottie animations and AE/Premiere motion-design templates. Kinetic typography, transitions, loops, lower-thirds, intro/outro sequences.

Parameters
NameTypeDefaultDescription
querystringrequiredSearch query or motion type.
kindstring"any""transition", "title", "loop", "intro", "lower-third", or "any".
formatstring"any""lottie", "ae", "premiere", or "any".
duration_maxintegernullMax duration in seconds.
limitinteger15Max results (1-50).

list_sources meta

Returns the full catalog of available tools, their underlying upstream sources, and current operational status.

Response
{
  "tools": [
    {
      "name": "search_images",
      "category": "photos",
      "sources": ["unsplash","pexels","pixabay","openverse","wikimedia","nasa","met"],
      "status": "operational"
    },
    ...
  ]
}

License model.

Every search result carries four normalized license fields, regardless of source:

FieldTypeDescription
license_namestringCanonical license name (e.g. "CC0", "CC-BY-4.0", "Unsplash License").
license_urlstringLink to the full license text.
commercial_usebooleanTrue if commercial use is permitted.
attribution_requiredbooleanTrue if attribution must be given.

Common license types you'll see

  • CC0: public domain, no restrictions. Examples: Poly Haven, parts of OpenVerse.
  • CC-BY: free to use commercially, attribution required.
  • CC-BY-NC: non-commercial only. Filtered out by commercial_safe_only: true.
  • Unsplash License: free commercial use, no attribution required (though appreciated).
  • Pexels License: similar to Unsplash; free commercial use, no attribution.
  • Pixabay License: free for most commercial use with some restrictions (no selling without modification).
Best practice Pass commercial_safe_only: true on any search where the agent's output will be published, sold, or used in marketing. AgenticSource filters NC-licensed results out of the response entirely, so your agent doesn't need its own license-checking logic.

Rate limits & quotas.

Per-minute rate limits

PlanSearch
Free30/min
Pro120/min
Stock+600/min

Monthly quotas

PlanSearches/moOverage
Free500hard-block until reset
Pro25,000soft-cap + boost packs
Stock+250,000soft-cap + boost packs

Soft-capped plans never silently fail. At 80% of quota you receive a dashboard banner and email warning. At 100% your agent gets a structured response with a one-click boost-pack purchase link. With auto-buy enabled (Pro and Stock+ setting), boost packs purchase automatically up to your configured monthly max-spend cap (default $50).

Pagination

Search tools return up to 50 results per call. Cross-source tools merge and rank results internally before returning. For deeper pagination, pass offset in the request:

await mcp.search_images({ query: "...", limit: 35, offset: 35 })

Note: deep pagination beyond ~200 results is not recommended; relevance scores drop off sharply across all upstream sources.

Caching

Identical queries are served from Cloudflare KV cache for 24 hours (search), 7 days (icon/font lookups), or 30 days (3D/HDRI/textures, which rarely change). Cache hits return in under 50ms and do not count against any upstream rate limit.

Errors.

AgenticSource follows JSON-RPC 2.0 error response shape. Standard MCP error codes plus a few application-specific ones.

CodeNameMeaning
-32700parse_errorInvalid JSON received.
-32600invalid_requestJSON-RPC request shape is invalid.
-32601method_not_foundTool name doesn't exist.
-32602invalid_paramsParameters failed validation.
-32000quota_exhaustedMonthly quota hit. data.boost_options contains buy links.
-32001rate_limitedPer-minute rate limit hit. Retry after data.retry_after_ms.
-32002upstream_unavailableAn upstream source is down. Result still includes data from healthy sources.
-32003auth_requiredBearer token missing or invalid.
-32004plan_gatedFeature not available on your plan. data.upgrade_url provided.

Self-host.

The AgenticSource server is MIT-licensed and runs on Cloudflare Workers, D1, and KV. Full source on GitHub.

What you need

  • A Cloudflare account with Workers, D1, and KV enabled.
  • Upstream API keys: Unsplash, Pexels, Pixabay, Freesound, Google Fonts (free tiers cover the basics).
  • Optional: Stripe account if you want to run a paid product on top of self-hosted.

Deploy

git clone https://github.com/agenticsource/agenticsource
cd agenticsource
npm install
npx wrangler login
npx wrangler d1 create agenticsource-db
npx wrangler kv:namespace create CACHE
# paste returned IDs into wrangler.toml
npx wrangler d1 execute agenticsource-db --remote --file=schema.sql
# set secrets for each upstream
npx wrangler secret put UNSPLASH_ACCESS_KEY
npx wrangler secret put PEXELS_API_KEY
# ... etc
npm run deploy

Each tool source is in src/sources/ as its own file, so removing or replacing a category is a one-file change.

Ready to integrate?

Sign up to get your endpoint and API key. Free tier covers a real workflow.

Get started, free