MCP Server
Connect AI assistants to the Quikturn logo database via Model Context Protocol
The Quikturn MCP (Model Context Protocol) server exposes the logo database as tools for AI agents. Any MCP-compatible client — Claude Desktop, Cursor, Windsurf, Cline, etc. — can search for company logos and retrieve them as base64 image data or signed URLs.
Single endpoint: https://logos.getquikturn.io/mcp — this is the only URL you need.
Quick Start
Create Your Account
Sign up here to create your Quikturn account. The Free tier includes MCP access with 20 requests/day.
Configure Your MCP Client
- Go to claude.ai/customize/connectors
- Add a connector with URL:
https://logos.getquikturn.io/mcp - Sign in with your Quikturn account when prompted
- Approve the consent screen
- Start using logo tools in any conversation
Install the plugin:
claude plugin install quikturn-sdk/quikturn-claude-pluginOr manually add the connector to your MCP config:
{
"mcpServers": {
"quikturn": {
"type": "http",
"url": "https://logos.getquikturn.io/mcp"
}
}
}Go to Settings → MCP Servers → Add and enter:
{
"quikturn": {
"url": "https://logos.getquikturn.io/mcp"
}
}Same format — a Streamable HTTP endpoint. Authentication is handled via the standard OAuth flow when you first connect.
{
"mcpServers": {
"quikturn": {
"type": "http",
"url": "https://logos.getquikturn.io/mcp"
}
}
}Use the Tools
Once connected, your AI agent has access to three tools:
Agent: "Find the Apple logo"
→ calls search_logos(query: "Apple")
→ calls get_logo(logoId: 123, returnType: "base64")
→ inserts logo into your slideAuthentication
OAuth 2.1 (Primary)
The MCP server uses OAuth 2.1 for authentication. When you add the connector, your MCP client handles the OAuth flow automatically:
- Client discovers the OAuth server via
/.well-known/oauth-protected-resource - Client redirects you to sign in with your Quikturn account
- You approve access on the consent screen
- Client receives an access token and uses it for all subsequent requests
No API keys needed — just sign in with your Quikturn account.
Plan Requirements
| Plan | MCP Access | Rate Limit |
|---|---|---|
| Free | Yes | 20 requests/day |
| Launch | Yes | 1,000 req/min |
| Growth | Yes | 10,000 req/min |
| Enterprise | Yes | 100,000 req/min |
Rate limit exceeded returns HTTP 429 with a Retry-After: 60 header. Free tier daily limit resets at midnight UTC.
Transport
| Property | Value |
|---|---|
| Protocol | Model Context Protocol (MCP) over Streamable HTTP |
| Endpoint | POST https://logos.getquikturn.io/mcp |
| Content-Type | application/json (JSON-RPC 2.0) |
| Accept | application/json, text/event-stream (required) |
| Body limit | 1 MB |
| Mode | Stateless — each request is independent, no server-side sessions |
Tools Reference
search_logos
Search the logo database by company name, domain, or ticker symbol. Returns metadata only — no image data.
Parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
query | string (max 500 chars) | Yes | — | Search query (company name, domain, or ticker) |
limit | number | No | 5 | Number of results to return (1–20) |
Example call:
{
"query": "Microsoft",
"limit": 3
}Response:
[
{
"logoId": 456,
"companyId": 123,
"companyName": "Microsoft Corporation",
"domain": "microsoft.com",
"variant": "full",
"width": 1200,
"height": 600,
"format": "png"
},
{
"logoId": 457,
"companyId": 123,
"companyName": "Microsoft Corporation",
"domain": "microsoft.com",
"variant": "icon",
"width": 256,
"height": 256,
"format": "svg"
}
]Results include companyId so you can call get_company_logos for all logos from that company. The variant field indicates whether the logo is a full wordmark ("full") or icon-only ("icon").
get_logo
Retrieve a specific logo as base64-encoded image data or a time-limited signed URL.
Parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
logoId | number | Yes | — | Logo ID from search_logos results |
returnType | "base64" or "url" | No | "base64" | How to deliver the image |
Request:
{
"logoId": 456
}Response:
{
"base64": "iVBORw0KGgo...",
"mimeType": "image/png",
"format": "png",
"width": 1200,
"height": 600,
"companyName": "Microsoft Corporation"
}Request:
{
"logoId": 456,
"returnType": "url"
}Response:
{
"url": "https://s3.amazonaws.com/...?X-Amz-Signature=...",
"expiresIn": 3600,
"mimeType": "image/png",
"format": "png",
"width": 1200,
"height": 600,
"companyName": "Microsoft Corporation"
}When to use each mode
| Mode | Use case | Trade-off |
|---|---|---|
base64 (default) | Inserting directly into PowerPoint slides, embedding in documents | Larger payload; 5 MB file size limit |
url | Displaying in chat, linking, downloading separately | Requires follow-up HTTP request; URL expires in 1 hour |
Logos larger than 5 MB are rejected in base64 mode with a suggestion to use URL mode instead.
Supported formats: PNG, JPG/JPEG, SVG, WebP, GIF
get_company_logos
Get all logo variants for a specific company. Returns metadata only — call get_logo to fetch the actual image.
Parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
companyId | number | Yes | — | Company ID from search_logos results |
variant | "full" or "icon" | No | — | Filter to only full logos or only icons |
Example call:
{
"companyId": 123,
"variant": "icon"
}Response:
[
{
"logoId": 457,
"companyId": 123,
"companyName": "Microsoft Corporation",
"domain": "microsoft.com",
"variant": "icon",
"width": 256,
"height": 256,
"format": "svg"
}
]Typical Workflows
Single Logo Insert
1. search_logos(query: "Acme Corp")
→ Get list of matching logos with metadata
2. Pick the best match (e.g., highest resolution, preferred variant)
3. get_logo(logoId: 456, returnType: "base64")
→ Get the actual image data
4. Insert the base64 data into the slide/documentBrowse All Variants
1. search_logos(query: "Acme Corp")
→ Note the companyId from results
2. get_company_logos(companyId: 123)
→ See all available logos (full wordmarks, icons, etc.)
3. get_logo(logoId: chosen_id)
→ Fetch the one you wantError Reference
Tool-Level Errors
When a tool encounters an error, it returns an MCP error response with isError: true and a human-readable message.
| Scenario | Error Message |
|---|---|
| Logo not found | Logo with ID 123 not found |
| Company not found | No company found with ID 456 |
| S3 image retrieval failed | Unable to retrieve image. Try again or use returnType: 'url' |
| Signed URL generation failed | Unable to generate signed URL. Try again later |
| Logo file exceeds 5 MB (base64 mode) | Logo file exceeds 5MB. Use returnType: 'url' instead |
| Search service failure | Search failed. Try again later |
| Unexpected error | Failed to get logo. Try again later |
HTTP-Level Errors
These occur before the MCP handler runs (auth/rate limit failures):
| Status | Scenario | Body |
|---|---|---|
| 401 | Missing or invalid token | {"error": "Authorization required"} |
| 401 | Expired or revoked token | {"error": "Invalid or expired token"} |
| 403 | No API client associated | {"error": "No API client associated with this account"} |
| 403 | Plan doesn't include MCP | {"error": "Your plan does not include MCP access"} |
| 429 | Rate limit exceeded | {"error": "Rate limit exceeded"} + Retry-After: 60 header |
| 429 | Free tier daily cap | {"error": "Daily limit of 20 requests exceeded. Upgrade your plan for higher limits."} |
| 500 | Internal server error | {"error": "Internal MCP server error"} |
Testing Your Connection
curl examples require a valid OAuth access token. Obtain one by completing the OAuth flow through your browser, then use the access_token from the token response.
All curl examples require the header Accept: application/json, text/event-stream.
List Available Tools
curl -X POST https://logos.getquikturn.io/mcp \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list"
}'Search for Logos
curl -X POST https://logos.getquikturn.io/mcp \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "search_logos",
"arguments": {
"query": "Apple",
"limit": 3
}
}
}'Fetch a Logo as base64
curl -X POST https://logos.getquikturn.io/mcp \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "get_logo",
"arguments": {
"logoId": 123,
"returnType": "base64"
}
}
}'Using the MCP Inspector
The MCP Inspector provides a web UI for testing MCP servers:
npx @modelcontextprotocol/inspectorEnter the server URL (https://logos.getquikturn.io/mcp). The inspector will guide you through OAuth authentication.