Skip to content
QuikturnQuikturn

MCP Server

Connect AI assistants to the Quikturn logo database via Model Context Protocol

The Quikturn MCP server gives AI agents direct access to the logo database. Any MCP-compatible client can search for company logos, retrieve them as public PNG URLs or base64 image data, fetch logos in batch, and submit feedback.

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 50 requests/day and 30 unique companies/day.

Configure Your MCP Client

  1. Open claude.ai or Claude Desktop
  2. Navigate to Settings → Connectors
  3. Click AddAdd custom connector
  4. Enter the URL: https://logos.getquikturn.io/mcp
  5. Sign in with your Quikturn account when prompted and approve the consent screen
  6. Start using logo tools in any conversation

Network egress: Go to Settings → Capabilities, enable network egress for code execution, and add *.getquikturn.io to the domain allowlist.

Use the Tools

Once connected, your AI agent has access to seven tools:

Agent: "Find the Apple logo"
→ calls search_logos(query: "Apple")
→ calls fetch_logo(query: "apple.com")
→ returns PNG URL for download or base64 for embedding

Authentication

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:

  1. Client discovers the OAuth server via /.well-known/oauth-protected-resource
  2. Client redirects you to sign in with your Quikturn account
  3. You approve access on the consent screen
  4. 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

PlanMCP AccessRate LimitDaily Unique Companies
FreeYes50 requests/day30
LaunchYes1,000 req/minIncluded in quota
GrowthYes10,000 req/minIncluded in quota
EnterpriseYes100,000 req/minCustom

Free tier daily limit resets at midnight UTC. Rate limit exceeded returns HTTP 429 with a Retry-After: 60 header.

One MCP HTTP call consumes one mcp_request. Distinct companies resolved by fetch_logo, get_logo, get_company_logos, insert_logo, and fetch_logos share the same unique-company accounting. Search-only results do not consume unique-company quota.


Transport

PropertyValue
ProtocolModel Context Protocol (MCP) over Streamable HTTP
EndpointPOST https://logos.getquikturn.io/mcp
Content-Typeapplication/json (JSON-RPC 2.0)
Acceptapplication/json, text/event-stream (required)
Body limit1 MB
ModeStateless — 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:

ParameterTypeRequiredDefaultDescription
querystring (max 500 chars)YesSearch query (company name, domain, or ticker)
limitnumberNo5Number of results to return (1–20)

Example call:

{
  "query": "Microsoft",
  "limit": 3
}

Response:

{
  "results": [
    {
      "logoId": 456,
      "companyId": 123,
      "companyName": "Microsoft Corporation",
      "domain": "microsoft.com",
      "variant": "full",
      "sourceWidth": 1200,
      "sourceHeight": 600
    }
  ]
}

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"). Search results intentionally omit delivery fields such as format, mimeType, url, and resourceUri; call a fetch tool to get those fields.


Fetch a single company logo by name, domain, or ticker. Returns the logo as a public permanent PNG URL or base64-encoded image data.

Parameters:

ParameterTypeRequiredDefaultDescription
querystringYesCompany name, domain, or ticker (e.g., "apple.com", "Apple", "AAPL")
variant"full" or "icon"NoPreferred logo variant; falls back to best available if unavailable, setting variantFallback: true in the response
maxWidthnumberNoMaximum pixel width (1–3200). Scale-down only; never upscales.
returnType"url" or "base64"No"url"How to deliver the image

Example call:

{
  "query": "apple.com",
  "maxWidth": 400
}

Response:

{
  "ok": true,
  "logoId": 789,
  "companyId": 42,
  "companyName": "Apple Inc.",
  "domain": "apple.com",
  "variant": "full",
  "format": "png",
  "mimeType": "image/png",
  "url": "https://logos.getquikturn.io/assets/bG9nb3MvYXBwbGUuY29tLnBuZw?maxWidth=400",
  "resourceUri": "qt://logo/789?maxWidth=400",
  "width": 400,
  "height": 400,
  "sourceWidth": 1024,
  "sourceHeight": 1024,
  "dimensionsStatus": "known"
}

fetch_logo is the simplest way to get a logo — just provide a query. Use search_logos when you need to browse multiple results.


Retrieve a specific logo. By default returns a public permanent PNG URL. Optionally returns base64-encoded image data or an Anthropic Files API file_id.

Parameters:

ParameterTypeRequiredDefaultDescription
logoIdnumberYesLogo ID from search_logos results
maxWidthnumberNoMaximum pixel width (1–3200). Scale-down only; never upscales. Aspect ratio preserved.
returnType"url" | "base64" | "file"No"url"How to deliver the image

Request:

{
  "logoId": 456,
  "maxWidth": 400
}

Response:

{
  "logoId": 456,
  "companyId": 123,
  "companyName": "Microsoft Corporation",
  "domain": "microsoft.com",
  "variant": "full",
  "format": "png",
  "mimeType": "image/png",
  "url": "https://logos.getquikturn.io/assets/bG9nb3MvbWljcm9zb2Z0LmNvbS5wbmc?maxWidth=400",
  "resourceUri": "qt://logo/456?maxWidth=400",
  "width": 400,
  "height": 200,
  "sourceWidth": 1200,
  "sourceHeight": 600,
  "dimensionsStatus": "known"
}

The URL is public, permanent, and unsigned — no credentials or tokens appear in it. You can save it, share it, or embed it directly in documents.

Every successful get_logo response includes the public url. Base64 mode adds base64; file mode adds file_id when the Files API upload succeeds and otherwise falls back to base64.

When to use each mode

ModeUse caseTrade-off
url (default)Downloading logos, embedding in documents, inserting into slidesPublic permanent URL; requires HTTP fetch to get bytes
base64Inline embedding where URLs aren't supported (e.g., some MCP resource contexts)Larger payload over JSON-RPC; 5 MB file size limit
fileProvider-specific server integrationThe server uploads the PNG via its own Anthropic Files API key and returns a file_id; only usable when the surrounding workflow is configured to consume that ID. Prefer url or base64 for general MCP clients.

URL-first workflow: Use the URL to download the PNG directly via curl, fetch, or your browser. The URL returns image/png bytes — not a redirect.

Logos larger than 5 MB are rejected in base64 mode with a suggestion to use URL mode instead.

Output dimensions

When maxWidth is provided and is smaller than the source width, the output is scaled down proportionally. When maxWidth is omitted or larger than the source, the logo is served at its original dimensions. The response includes both width/height (output) and sourceWidth/sourceHeight (original) so you know exactly what you're getting.

dimensionsStatus is "known" when source dimensions are available from stored metadata or image inspection. It is "unknown" when they cannot be determined; in that case the dimension fields may be null.


get_company_logos

Get all logo variants for a specific company. Returns metadata and public URLs for each variant.

Parameters:

ParameterTypeRequiredDefaultDescription
companyIdnumberYesCompany ID from search_logos results
variant"full" or "icon"NoFilter to only full logos or only icons

Example call:

{
  "companyId": 123,
  "variant": "icon"
}

Response:

{
  "logos": [
    {
      "logoId": 457,
      "companyId": 123,
      "companyName": "Microsoft Corporation",
      "domain": "microsoft.com",
      "variant": "icon",
      "format": "png",
      "mimeType": "image/png",
      "url": "https://logos.getquikturn.io/assets/bG9nb3MvbWljcm9zb2Z0LmNvbS1pY29uLnBuZw",
      "resourceUri": "qt://logo/457",
      "sourceWidth": 256,
      "sourceHeight": 256
    }
  ],
  "_meta": {
    "usage": {
      "requests": { "current": 15, "limit": 50 },
      "companies": { "current": 9, "limit": 30 }
    }
  }
}

get_company_logos optionally includes _meta.usage when the server has authenticated MCP context. It reports your current request and unique-company counts against plan limits. Only get_company_logos and insert_logo expose this usage summary.


Search for a company logo and prepare it for insertion onto the current PowerPoint slide. Returns a file_id (uploaded to Anthropic's Files API) and step-by-step instructions for the agent to complete the insertion.

Parameters:

ParameterTypeRequiredDefaultDescription
querystring (max 500 chars)YesCompany name, domain, or ticker to search for
imageWidthnumberNo150Width in points for the inserted image
imageHeightnumberNoautoHeight in points (auto-calculated from aspect ratio if omitted)
imageLeftnumberNo300Left position in points (roughly centered)
imageTopnumberNo200Top position in points (roughly centered)

Example call:

{
  "query": "Salesforce",
  "imageWidth": 200,
  "imageHeight": 200
}

Response:

{
  "file_id": "file-abc123",
  "blob_name": "quikturn_logo_789",
  "companyName": "Salesforce, Inc.",
  "instructions": "**Step 1:** Call store_blob with these parameters:\n- file_id: \"file-abc123\"\n- blob_name: \"quikturn_logo_789\"\n\n**Step 2:** Call execute_office_js with this code:\n```\nconst b64 = blobs.getBase64(\"quikturn_logo_789\");\nawait insertImage(b64, { imageLeft: 300, imageTop: 200, imageWidth: 200, imageHeight: 200 });\n```",
  "_meta": {
    "usage": {
      "requests": { "current": 12, "limit": 50 },
      "companies": { "current": 8, "limit": 30 }
    }
  }
}

insert_logo optionally includes _meta.usage when the server has authenticated MCP context. It reports your current request and unique-company counts against plan limits. Only get_company_logos and insert_logo expose this usage summary.

This tool is designed for the Quikturn PowerPoint Add-in agent flow. After calling insert_logo, the agent must follow the returned instructions — first calling store_blob with the file_id, then execute_office_js with the provided code. Do not attempt to embed base64 data directly.


fetch_logos

Batch-retrieve logos for multiple domains in a single call. Preserves input order and reports partial failures individually.

Parameters:

ParameterTypeRequiredDefaultDescription
domainsstring[]YesArray of company domains to fetch logos for
variant"full" or "icon"NoPreferred logo variant applied to all domains; falls back to best available per domain, setting variantFallback: true on that result
returnType"url" or "base64"No"url"How to deliver images (max 25 domains for URL, max 5 for base64)
maxWidthnumberNoMaximum pixel width (1–3200), applied to all results

Example call:

{
  "domains": ["apple.com", "google.com", "nonexistent.example"],
  "maxWidth": 200
}

Response:

{
  "results": [
    {
      "domain": "apple.com",
      "ok": true,
      "companyId": 42,
      "companyName": "Apple Inc.",
      "resolvedDomain": "apple.com",
      "logoId": 789,
      "variant": "full",
      "format": "png",
      "mimeType": "image/png",
      "url": "https://logos.getquikturn.io/assets/bG9nb3MvYXBwbGUuY29tLnBuZw?maxWidth=200",
      "resourceUri": "qt://logo/789?maxWidth=200",
      "width": 200,
      "height": 200,
      "sourceWidth": 1024,
      "sourceHeight": 1024,
      "dimensionsStatus": "known"
    },
    {
      "domain": "google.com",
      "ok": true,
      "companyId": 55,
      "companyName": "Alphabet Inc.",
      "resolvedDomain": "google.com",
      "logoId": 1024,
      "variant": "full",
      "format": "png",
      "mimeType": "image/png",
      "url": "https://logos.getquikturn.io/assets/bG9nb3MvZ29vZ2xlLmNvbS5wbmc?maxWidth=200",
      "resourceUri": "qt://logo/1024?maxWidth=200",
      "width": 200,
      "height": 100,
      "sourceWidth": 800,
      "sourceHeight": 400,
      "dimensionsStatus": "known"
    },
    {
      "domain": "nonexistent.example",
      "ok": false,
      "error": "No company found for domain"
    }
  ],
  "summary": {
    "requested": 3,
    "resolved": 2,
    "failed": 1
  }
}

Results preserve input order. Each domain reports independently — a failure for one domain does not affect others. Duplicate resolved company IDs consume unique-company quota only once.

When using returnType: "base64", the combined encoded payload of all results must not exceed 5 MB. Use URL mode for large batches.


send_feedback

Submit feedback about data quality, bugs, or feature requests.

Parameters:

ParameterTypeRequiredDescription
category"data_quality" | "bug" | "feature_request" | "other"YesFeedback category
messagestring (max 5000 chars)YesFeedback message
domainstringNoRelated company domain
logoIdnumberNoRelated logo ID
toolstringNoTool that triggered the feedback

Example call:

{
  "category": "data_quality",
  "message": "The Microsoft logo returned for logoId 456 is outdated — it shows the pre-2012 version.",
  "logoId": 456,
  "domain": "microsoft.com"
}

Response:

{
  "ok": true,
  "remaining": 4,
  "referenceId": "fb-42-1787961600000",
  "timestamp": "2026-08-29T00:00:00.000Z",
  "serverVersion": "1.0.0"
}

Feedback is limited to 5 submissions per client per UTC calendar day. Authenticated metadata (account, client) is attached automatically.


Resource URIs

The MCP server exposes logo resources via the URI scheme:

qt://logo/{logoId}?maxWidth=N
  • Output is always PNG.
  • maxWidth is optional (1–3200). Scale-down only; never upscales.
  • Resource reads return base64-encoded PNG data via JSON-RPC, providing a fallback for clients that cannot download the public URL directly.
  • Rendered resources exceeding 5 MB are rejected with a suggestion to use the public URL or a lower maxWidth.

Resource links included in tool responses (via structuredContent) provide qt://logo/... URIs that clients can resolve on demand. This is a base64 JSON-RPC fallback — not true binary streaming. For large or batch downloads, use the public PNG URLs directly.


Public Logo Assets

Logo images are served as public, permanent, unsigned PNG files from the transform URL:

https://logos.getquikturn.io/assets/{base64urlKey}?maxWidth=N
PropertyValue
Responseimage/png bytes (not a redirect)
CacheCache-Control: public, immutable with ETag
CORSSuitable for public embedding
maxWidthOptional, 1–3200, scale-down only, aspect ratio preserved
CredentialsNone — URLs are public and require no authentication

The {base64urlKey} is an unpadded base64url encoding of the R2 object key, restricted to logo-object prefixes.

Downloading logos

Use any HTTP client to download:

# Download a logo PNG
curl -o logo.png "https://logos.getquikturn.io/assets/bG9nb3MvYXBwbGUuY29tLnBuZw?maxWidth=400"

# Verify it's a valid PNG
file logo.png
# → logo.png: PNG image data, 400 x 200, ...

These URLs can be embedded directly in HTML, Markdown, slides, or documents.


Typical Workflows

URL-First Download

The recommended workflow for most use cases:

1. search_logos(query: "Acme Corp")
   → Get list of matching logos with metadata

2. get_logo(logoId: 456, maxWidth: 800)
   → Get a public permanent PNG URL

3. Download the PNG via the URL (curl, fetch, browser, etc.)
   → Insert into your document, slide, or app

Embedded Document Workflow

For contexts where you need inline image data:

1. search_logos(query: "Acme Corp")
   → Get list of matching logos

2. get_logo(logoId: 456, returnType: "base64")
   → Get base64-encoded PNG data

3. Embed the base64 data directly (e.g., data URI, PowerPoint insert)

Batch Logos

1. fetch_logos(domains: ["apple.com", "google.com", "microsoft.com"], maxWidth: 200)
   → Get all logos in one call, preserving input order

2. Download the returned PNG URLs
   → Insert into your document or app

Browse 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 want

Structured Output

Successful tool responses include both structuredContent (machine-readable typed content blocks) and equivalent JSON text. Clients that support structured content get richer rendering; others fall back to the JSON text representation. Error responses return isError: true with a text message only.


Error Reference

Tool-Level Errors

When a tool encounters an error, it returns an MCP error response with isError: true and a human-readable message.

ScenarioError Message
Logo not foundLogo with ID 123 not found
Company not foundNo company found with ID 456
Image retrieval failedUnable to retrieve image. Try again or use returnType: 'url'
Logo file exceeds 5 MB (base64 mode)Logo file exceeds 5MB. Use returnType: 'url' instead
Resource exceeds 5 MB (qt://logo/ read)Rendered logo exceeds 5MB. Use the public URL or a lower maxWidth.
Batch base64 aggregate exceeds 5 MB (fetch_logos)Aggregate base64 payload size exceeds 5MB limit
Search service failureSearch failed. Try again later
Feedback rate limitedDaily feedback limit (5) exceeded. Try again tomorrow.
Daily unique-company quota exceededDaily company limit ({limit}) exceeded. You've accessed {current} unique companies today. Resets at {ISO timestamp}.
Quota service temporarily unavailableQuota service temporarily unavailable. Try again later.
Unexpected errorFailed to get logo. Try again later

HTTP-Level Errors

These occur before the MCP handler runs (auth/rate limit failures):

StatusScenarioBody
401Missing or invalid token{"error": "Authorization required"}
401Expired or revoked token{"error": "Invalid or expired token"}
403No API client associated{"error": "No API client associated with this account"}
403Plan doesn't include MCP{"error": "Your plan does not include MCP access"}
429Rate limit exceeded{"error": "Rate limit exceeded"} + Retry-After: 60 header
429Free tier daily cap{"error": "Daily limit of 50 requests exceeded. Upgrade your plan for higher limits."}
500Internal 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 URL

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,
        "maxWidth": 400
      }
    }
  }'

Verify a Public Logo URL

# Download and verify the PNG
curl -o logo.png "https://logos.getquikturn.io/assets/bG9nb3MvYXBwbGUuY29tLnBuZw?maxWidth=400"
file logo.png

Using the MCP Inspector

The MCP Inspector provides a web UI for testing MCP servers:

npx @modelcontextprotocol/inspector

Enter the server URL (https://logos.getquikturn.io/mcp). The inspector will guide you through OAuth authentication.

On this page