Shareglow
Allows forcing Facebook to re-fetch a page's link preview after Open Graph tags or images change, via the refresh_preview tool, which re-scrapes Facebook as part of Shareglow's preview refresh.
shareglow-mcp
MCP server for Shareglow: scan link previews, generate Open Graph images, create short links with their own preview, and read click stats from any MCP client.
It is a thin client of the Shareglow REST API (/v1). Your API key is passed straight through, so plan limits and rate limits apply unchanged. The server holds no credentials of its own.
Hosted endpoint
https://mcp.getshareglow.com/mcp
Authorization: Bearer sk_live_...Transport: Streamable HTTP. Create an API key at https://app.getshareglow.com/developer.
Related MCP server: picoli-mcp
Tools
Tool | Description |
| Scan a public web page and report its link-preview (Open Graph / Twitter Card) metadata, previews per platform, and issues with fix suggestions. |
| Render a 1200x630 Open Graph image from a template id (see |
| Use AI to design a new OG image template from a website's brand (logo, colors, fonts) taken from a URL. Returns the layout id, the variables to pass, and the extracted brand kit. Counts against the plan's AI quota. |
| List the OG image templates the workspace can render (built-in and custom) with id, name, version and dimensions. |
| Create a short link with its own link preview. Optional custom slug and optional A/B variants (title, description, imageUrl or templateId). Returns id, shortUrl and variants. |
| Get click analytics for a short link by id: totals plus breakdowns by day, country, device, browser and referrer. Optional |
| Force social platforms to re-fetch a page's link preview after you changed its OG tags or image: bumps the og:image cache-buster, re-scrapes Facebook, and returns the LinkedIn Post Inspector link and the X cache note. |
Client setup
Claude Code
claude mcp add --transport http shareglow https://mcp.getshareglow.com/mcp \
--header "Authorization: Bearer sk_live_..."Claude Desktop
Claude Desktop reaches remote servers through mcp-remote. Add to claude_desktop_config.json:
{
"mcpServers": {
"shareglow": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.getshareglow.com/mcp", "--header", "Authorization:${AUTH}"],
"env": { "AUTH": "Bearer sk_live_..." }
}
}
}Or skip the remote and use the stdio server below.
Cursor
~/.cursor/mcp.json:
{
"mcpServers": {
"shareglow": {
"url": "https://mcp.getshareglow.com/mcp",
"headers": { "Authorization": "Bearer sk_live_..." }
}
}
}Local stdio (any client)
{
"mcpServers": {
"shareglow": {
"command": "npx",
"args": ["-y", "shareglow-mcp"],
"env": { "SHAREGLOW_API_KEY": "sk_live_..." }
}
}
}The key can also be passed as --api-key sk_live_.... SHAREGLOW_API_URL points the server at another REST base (default https://app.getshareglow.com).
Errors and limits
Each tool needs the key scope of its REST call. A key without it gets
403 insufficient_scope.REST
401,402,403and429become MCP tool errors (isError: true) that carry the API's message.URLs are validated before forwarding (http/https, no private or local hosts).
Tool results are truncated at 20,000 characters. The API key is redacted from every result and error.
Local development
npm install
npm run typecheck
npm test
npm run build
npm run dev # Streamable HTTP on PORT (default 8791)
npm run dev:worker # Cloudflare Worker via wrangler devNode 22 or newer is required.
License
MIT, see LICENSE.
Available Tools
7 toolscreate_short_linkAInspect
Create a short link with its own link preview. Optional custom slug, and optional A/B variants (each with a title, description, imageUrl or templateId) to test which preview gets more clicks. Returns id, shortUrl and variants. Use the id with get_link_stats.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | ||
| variants | No | ||
| destination | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses the return shape (id, shortUrl, variants) and that slug/variants are optional, but says nothing about permissions, rate limits, or how variant conflicts/link ownership behave.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly written sentences with the primary action front-loaded and the follow-up call placed at the end. No filler, though it could be marginally tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description helpfully explains return values, and it flags the A/B testing intent. It still leaves permissions, the undocumented 'params' variant field, and validation constraints unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It names slug and the variant fields (title, description, imageUrl, templateId) but omits the variant 'params' object entirely and gives no hint of the 3-variant cap, slug pattern, or field length limits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Create a short link with its own link preview') that clearly names the artifact produced, plus a note that it returns id/shortUrl/variants. It does not explicitly differentiate from siblings like create_template_from_url, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a follow-up route ('Use the id with get_link_stats') and explains the purpose of A/B variants ('to test which preview gets more clicks'), but offers no when-to-use-vs-alternatives guidance or exclusions relative to the sibling preview/template tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_template_from_urlAInspect
Use AI to design a new OG image template from a website's brand (logo, colors, fonts) taken from a URL. Returns the chosen layoutId (a built-in template id usable with generate_og_image), the variables to pass, and the extracted brand kit. Counts against the plan's AI quota.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply openWorldHint=true, so the description carries the rest: it discloses that this is an AI-driven, non-deterministic operation and warns that it 'counts against the plan's AI quota' — valuable cost information an agent needs before invoking. It doesn't say whether a template is persisted, what happens on extraction failure, or whether the call is idempotent, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with purpose, then return values, then the quota caveat. No filler and nothing repeated from structured fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly spells out what comes back (layoutId, variables, extracted brand kit) and how the layoutId connects to generate_og_image. Combined with the quota warning, an agent has everything needed to call this correctly for a one-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single 'url' param is undocumented in the schema, so the description must compensate. It does clarify the semantic meaning of the URL — the website whose brand (logo, colors, fonts) will be extracted — but adds no format/length/edge-case guidance beyond the schema's uri and maxLength constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('design a new OG image template') plus the input source ('from a website's brand ... taken from a URL'), and it explains the artifact produced (layoutId usable with generate_og_image). An agent can distinguish this from generate_og_image, list_templates, or scan_url without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It makes the triggering condition clear (you have a website URL and want a branded template designed) and names generate_og_image as the downstream consumer of the returned layoutId. It stops short of stating when NOT to use it (e.g. vs list_templates for existing templates or scan_url for plain extraction), so it is clear context without explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_og_imageAInspect
Render a 1200x630 Open Graph image from a template id (see list_templates) and text params such as title and subtitle. Returns the permanent image URL to put in og:image, and whether it was already cached. Optional exp (Unix seconds, paid plans) makes the signed URL expire; leave it out for an og:image URL.
| Name | Required | Description | Default |
|---|---|---|---|
| exp | No | ||
| params | No | ||
| templateId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden: it discloses the return shape (permanent image URL plus cached flag), the caching behavior, and the paid-plan gating and URL-expiry semantics of exp. It omits auth requirements, latency of rendering, and side effects of generating an asset, keeping it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, dense with no filler, and front-loaded with the core render action before the return values and the exp caveat. Every clause carries usable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description does the work of explaining both the returned URL/cached flag and the exp behavior, which is what an agent needs to call it correctly. A bit more on permissions or the allowed params keys would make it fully complete for a nested-object tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: templateId is tied to list_templates, params is described as free-form text params (title, subtitle), and exp is explained as Unix seconds with paid-plan gating and expiry consequences. The unbounded key space of params is only illustrated by example, not fully characterized.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Render) and resource (1200x630 Open Graph image) plus the required input (template id). It names the sibling list_templates for obtaining a template id, so an agent can tell it apart from create_template_from_url without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear guidance on the templateId source (see list_templates) and explicit when-to-use for the optional exp param ('leave it out for an og:image URL'). It stops short of naming alternatives or exclusion cases for the tool itself, so it is clear context rather than full routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_link_statsARead-onlyInspect
Get click analytics for a short link by id (from create_short_link): totals plus breakdowns by day, country, device, browser and referrer. Optional from/to dates (YYYY-MM-DD).
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| from | No | ||
| linkId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already covers the safety profile, so the bar is lower. The description adds genuine behavioral value by disclosing the shape of the result (aggregate totals plus five named breakdown dimensions), which matters because there is no output schema. It omits auth requirements, rate limits, and whether date ranges have defaults or caps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler: the primary purpose and return scope lead, the parameter note trails. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only analytics endpoint with a simple 3-parameter schema and no output schema, the description covers purpose, prerequisite, return dimensions, and date format. Only date-range semantics (defaults, inclusivity, limits) are left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load. It clarifies that linkId references a link created via create_short_link and restates the YYYY-MM-DD format for from/to (already implied by the schema pattern). It says nothing about whether the range is inclusive, what the default window is, or any max span, leaving real gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get click analytics for a short link by id') and then enumerates the return content (totals plus breakdowns by day, country, device, browser, referrer). This clearly distinguishes it from the sibling tools, which are all creation/scan/template tools rather than analytics readers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical '(from create_short_link)' tells the agent the prerequisite: the link must already exist and its id comes from the creation tool. It also frames the tool as the follow-up read step. No explicit when-not-use or alternative is given, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_templatesARead-onlyInspect
List the OG image templates the workspace can render (built-in and custom) with id, name, version and dimensions. Call this before generate_og_image to pick a templateId.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this as a read-only operation, so the bar is lower. The description goes further by disclosing the return contents (id, name, version, dimensions) and the built-in/custom scope, which matters since there is no output schema. It does not cover pagination or auth, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The result contents come first and the prerequisite workflow hint is front-loaded second.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters and no output schema, the description supplies everything an agent needs: what is listed, what fields come back, and the sequencing relative to generate_og_image.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters (0 params), so the baseline is 4. Nothing in the description is needed to explain input, and it correctly does not attempt to.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (List) plus resource (OG image templates) with scope qualifiers (built-in and custom) and the returned fields. It is clearly distinguishable from generate_og_image, which it names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the exact call ordering: invoke this before generate_og_image, and why (to pick a templateId). That is an explicit when-to-use with the relevant alternative named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refresh_previewAInspect
Force social platforms to re-fetch a page's link preview after you changed its OG tags or image: bumps the og:image cache-buster, re-scrapes Facebook, and returns the LinkedIn Post Inspector link and the X cache note.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Only openWorldHint is annotated, so the description carries most of the burden, and it does disclose real side effects: cache-buster mutation, a Facebook re-scrape, and the returned LinkedIn/X artifacts. It omits auth requirements and any platform rate-limit or failure caveats, which matter for a tool that hits Facebook's scraper.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with the action front-loaded and consequences in a colon-delimited list, so nothing is wasted. It is slightly run-on, bundling the action, side effects, and return values into one clause chain.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully previews what comes back (LinkedIn Post Inspector link, X cache note), which an agent otherwise could not infer. What remains missing is auth/permission context for the external platforms, a real gap for an open-world tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One parameter with 0% schema description coverage, so the description must compensate. It implies the input is the page URL whose preview is being refreshed ('a page's link preview'), which gives useful context, but adds nothing about format expectations beyond what the schema's uri format already enforces.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Force social platforms to re-fetch a page's link preview') and enumerates the concrete effects (cache-buster bump, Facebook re-scrape). It is clearly distinguishable from siblings like generate_og_image, which produces an image rather than invalidating a cached preview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger condition: 'after you changed its OG tags or image.' That is clear when-to-use guidance. It stops short of naming a when-not condition or an alternative tool, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_urlARead-onlyInspect
Scan a public web page and report its link-preview (Open Graph / Twitter Card) metadata, previews per platform, and issues with fix suggestions. Use it to answer 'why does my link preview look wrong?'.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and openWorldHint annotations already establish that this is a safe external fetch, and 'public web page' is consistent with that. The description adds that output includes per-platform previews and fix suggestions, but says nothing about crawling limits, timeouts, auth requirements, or idempotency, so it adds only modest context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no waste: capability statement first, then the use case. Everything is front-loaded and each clause carries information an agent can act on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only scanner, the description names the analyzed inputs, the output categories (metadata, per-platform previews, issues with fixes), and the question it answers. Nothing needed to call it correctly is missing, and there is no output schema implying more detail was expected.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the url parameter, and it only implies one constraint: the page must be public. It does not explain acceptable formats, whether redirects are followed, or why the 2048-character cap exists, so it partially but not fully compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Scan a public web page') plus the exact artifacts produced (Open Graph / Twitter Card metadata, per-platform previews, issues with fixes). That scope separates it from siblings like refresh_preview and get_link_stats, though it never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It supplies a concrete usage context ('Use it to answer why does my link preview look wrong?'), which is a real routing signal for an agent. It stops short of stating when not to use it or which sibling to prefer for related tasks such as refreshing or generating previews.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v0.1.0- First observed
create_short_link - First observed
create_template_from_url - First observed
generate_og_image - First observed
get_link_stats - First observed
list_templates - First observed
refresh_preview - First observed
scan_url
TDQS
Scored across 7 tools
Most tools have clearly distinct purposes: scanning a page, rendering an image, listing templates, creating a template, creating a short link, reading stats, and refreshing previews. The main potential overlap is between scan_url and refresh_preview, since both concern link previews, but the descriptions distinguish diagnosis from cache invalidation.
All tool names use snake_case and follow a verb-first pattern such as scan_url, list_templates, create_short_link, and get_link_stats. The few longer names like generate_og_image and create_template_from_url remain readable and consistent with the convention.
Seven tools is well-scoped for a link-preview and OG-image service. Each tool covers a distinct step in the workflow, and there is no obvious redundancy or padding.
The core workflow is covered: scan previews, list/create templates, generate images, create short links, view stats, and refresh previews. However, lifecycle operations are thin for short links and templates, with no list/update/delete tools for either resource, which limits management beyond initial creation.
Maintenance
Related MCP Connectors
Check link previews (Open Graph, Twitter cards) on X, LinkedIn, Slack; OG images per page.
Social cards and OG images from designed templates: card from a URL, presets, meta tags, link checks
Pay-per-call Open Graph/link preview metadata for AI agents. $0.01 USDC per call, no signup.
Pay-per-use agent tools: schedule HTTP calls, extract pages, PDFs, OG images, QR codes, short links.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenancePaste a URL to see exactly how it renders as a social card on Twitter, LinkedIn, Facebook, and Slack. Generate custom OG images from templates.MIT
- AlicenseAqualityFmaintenanceEnables URL shortening, click tracking, and analytics for AI agents via the picoli.site API.525 npm2MIT
- AlicenseNot gradedqualityDmaintenanceZero-signup link-preview API that returns clean metadata (title, description, image, etc.) from any public URL. No API key required.2MIT
- AlicenseAqualityDmaintenanceEnables AI agents to shorten URLs, manage links, and track click analytics through 8 first-class tools, designed for use with Claude Desktop, Cursor, and other MCP clients.919 npmMIT