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.
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
}
}
}
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.
Client setup.
Drop-in configuration for the eight officially-tested MCP clients.
https://agenticsource.dev/mcp → click "Connect". OAuth handshake completes automatically.https://agenticsource.dev/mcp → Auth header: Bearer sk_as_...~/.codex/config.toml, add: [mcp_servers.agenticsource] url = "https://agenticsource.dev/mcp" auth = "bearer sk_as_..."~/.continue/config.json add the server to mcpServers with the endpoint URL and API key as the Authorization header.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
| Name | Type | Default | Description |
|---|---|---|---|
| query | string | required | Search query, freeform text. |
| orientation | string | "any" | "landscape", "portrait", "square", or "any". |
| color | string | null | Hex color or descriptor (e.g. "blue", "#3B82F6"). |
| commercial_safe_only | boolean | false | Filter out CC-BY-NC and other non-commercial licenses. |
| include_open_culture | boolean | true | Include results from Wikimedia, NASA, and Met Museum. |
| limit | integer | 35 | Max 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
| Name | Type | Default | Description |
|---|---|---|---|
| query | string | required | Search query. |
| min_duration | integer | 0 | Minimum duration in seconds. |
| max_duration | integer | null | Maximum duration in seconds. |
| resolution | string | "any" | "4k", "hd", "sd", or "any". |
| commercial_safe_only | boolean | false | Filter for commercial-safe results. |
| limit | integer | 20 | Max results (1-50). |
search_audio 2 sources
Freesound (~600k CC sounds) and Pixabay Music. Ambient, SFX, music tracks.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
| query | string | required | Search query. |
| kind | string | "any" | "sfx", "music", "ambient", "voice", or "any". |
| sources | string[] | ["freesound","pixabay"] | Which sources to query. |
| commercial_safe_only | boolean | false | Filter for commercial use. |
| limit | integer | 20 | Max results (1-50). |
search_icons 200k+ icons
Iconify aggregator across 150+ libraries: Lucide, Heroicons, Phosphor, Tabler, Material, FontAwesome, and more.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
| query | string | required | Icon name or descriptor. |
| prefix | string | null | Restrict to a library prefix (e.g. "lucide"). |
| style | string | "any" | "outline", "solid", "duotone", or "any". |
| limit | integer | 24 | Max results (1-100). |
search_illustrations 2 sources
unDraw static SVG illustrations and Lottiefiles animations. ~300k+ assets, mostly free for commercial use.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
| query | string | required | Search query or theme. |
| kind | string | "any" | "static" (unDraw), "animated" (Lottie), or "any". |
| color | string | null | Hex color to recolor unDraw illustrations (ignored for Lottie). |
| limit | integer | 20 | Max results (1-50). |
get_color_palette generative
Colormind generative palettes and The Color API scheme builder. Seedable, deterministic.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
| seed | string | null | Hex color or descriptor (e.g. "fintech", "#3B82F6"). |
| mode | string | "analogous" | "analogous", "complementary", "triadic", "monochromatic". |
| length | integer | 5 | Number of colors to return (3-8). |
find_logo any domain
Logo.dev lookup. Returns PNG, SVG URLs at multiple sizes, plus primary brand color.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
| domain | string | required | Domain to look up (e.g. "stripe.com"). |
| format | string | "svg" | "svg" or "png". |
| size | integer | 512 | PNG size in pixels (ignored for SVG). |
search_fonts 1,800+ families
Google Fonts and FontShare. Returns embed CSS, weights/variants, subsets, license info.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
| query | string | null | Font name or category. |
| category | string | "any" | "sans-serif", "serif", "monospace", "display", "handwriting". |
| weights | integer[] | null | Required weights (e.g. [400, 700]). |
| limit | integer | 20 | Max results. |
search_3d_assets Poly Haven
~2,000+ CC0 3D models, HDRIs, and PBR textures. All public-domain, all commercial-use safe.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
| query | string | required | Search query. |
| kind | string | "any" | "hdri", "texture", "model", or "any". |
| limit | integer | 15 | Max 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
| Name | Type | Default | Description |
|---|---|---|---|
| category | string | required | "device", "apparel", "packaging", "outdoor", "social". |
| device | string | null | Specific device (e.g. "iphone-15-pro", "macbook-pro-16"). |
| background | string | "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
| Name | Type | Default | Description |
|---|---|---|---|
| query | string | required | Search query or motion type. |
| kind | string | "any" | "transition", "title", "loop", "intro", "lower-third", or "any". |
| format | string | "any" | "lottie", "ae", "premiere", or "any". |
| duration_max | integer | null | Max duration in seconds. |
| limit | integer | 15 | Max 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:
| Field | Type | Description |
|---|---|---|
| license_name | string | Canonical license name (e.g. "CC0", "CC-BY-4.0", "Unsplash License"). |
| license_url | string | Link to the full license text. |
| commercial_use | boolean | True if commercial use is permitted. |
| attribution_required | boolean | True 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).
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
| Plan | Search |
|---|---|
| Free | 30/min |
| Pro | 120/min |
| Stock+ | 600/min |
Monthly quotas
| Plan | Searches/mo | Overage |
|---|---|---|
| Free | 500 | hard-block until reset |
| Pro | 25,000 | soft-cap + boost packs |
| Stock+ | 250,000 | soft-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.
| Code | Name | Meaning |
|---|---|---|
| -32700 | parse_error | Invalid JSON received. |
| -32600 | invalid_request | JSON-RPC request shape is invalid. |
| -32601 | method_not_found | Tool name doesn't exist. |
| -32602 | invalid_params | Parameters failed validation. |
| -32000 | quota_exhausted | Monthly quota hit. data.boost_options contains buy links. |
| -32001 | rate_limited | Per-minute rate limit hit. Retry after data.retry_after_ms. |
| -32002 | upstream_unavailable | An upstream source is down. Result still includes data from healthy sources. |
| -32003 | auth_required | Bearer token missing or invalid. |
| -32004 | plan_gated | Feature 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