Skip to main content
AllMCPs
BrowseBestCategoriesStackCompareToolsGuidesBlog Log in Submit MCP

Stay in the loop

Get new MCP servers and top picks in your inbox.

AllMCPs

The open directory for discovering and installing Model Context Protocol servers.

Explore

  • Browse servers
  • Best MCP servers
  • Categories
  • MCP clients
  • Agent prompts
  • Stack Builder
  • Compare servers
  • Tags index
  • Submit a server
  • Pricing

Learn

  • Guides hub
  • What is MCP?
  • Install guide
  • Troubleshooting
  • Security
  • Blog
  • Blog RSS

Tools

  • All tools
  • Config generator
  • Config validator
  • MCP playground
  • OpenAPI β†’ MCP
  • Badge generator

For agents

  • API docs
  • Trust & traffic
  • llms.txt β†— (opens in a new tab)
  • Catalog JSON β†— (opens in a new tab)
  • Remote MCP β†— (opens in a new tab)

Company

  • About
  • Contact
  • X (@AllMCPs) β†— (opens in a new tab)
  • GitHub β†— (opens in a new tab)
  • Terms
  • Privacy
AllMCPs VerifiedAllMCPs VerifiedFeatured on Nick LaunchesFeatured on Nick LaunchesLaunch Llama NewsletterLaunch Llama NewsletterVerified DR - allmcps.comVerified DR - allmcps.comFeatured on SaaSGrowFeatured on SaaSGrowFeatured on Twelve ToolsFeatured on Twelve ToolsFeatured on Saaspa.geFeatured on Saaspa.geFeatured on Findly.toolsFeatured on Findly.toolsFeatured on Startup FameFeatured on Startup FameFeatured on LaunchKiwiFeatured on LaunchKiwiFeatured on ScrollLaunchFeatured on ScrollLaunchFeatured on DailyPingsFeatured on DailyPingsFazier badgeFazier badgeFeatured on NewTool.siteFeatured on NewTool.siteFeatured on saasfame.comFeatured on saasfame.comDR Checker - Domain RatingDR Checker - Domain RatingListed on Turbo0Listed on Turbo0Launched on LaunchBoard - Product Launch PlatformLaunched on LaunchBoard - Product Launch PlatformList on SimilarlabsList on Similarlabshttps://codetrendy.comhttps://codetrendy.comListed on DevTool.ioFeatured on BuildlistFeatured on BuildlistAllMCPs VerifiedAllMCPs VerifiedFeatured on Nick LaunchesFeatured on Nick LaunchesLaunch Llama NewsletterLaunch Llama NewsletterVerified DR - allmcps.comVerified DR - allmcps.comFeatured on SaaSGrowFeatured on SaaSGrowFeatured on Twelve ToolsFeatured on Twelve ToolsFeatured on Saaspa.geFeatured on Saaspa.geFeatured on Findly.toolsFeatured on Findly.toolsFeatured on Startup FameFeatured on Startup FameFeatured on LaunchKiwiFeatured on LaunchKiwiFeatured on ScrollLaunchFeatured on ScrollLaunchFeatured on DailyPingsFeatured on DailyPingsFazier badgeFazier badgeFeatured on NewTool.siteFeatured on NewTool.siteFeatured on saasfame.comFeatured on saasfame.comDR Checker - Domain RatingDR Checker - Domain RatingListed on Turbo0Listed on Turbo0Launched on LaunchBoard - Product Launch PlatformLaunched on LaunchBoard - Product Launch PlatformList on SimilarlabsList on Similarlabshttps://codetrendy.comhttps://codetrendy.comListed on DevTool.ioFeatured on BuildlistFeatured on Buildlist
Β© 2026 Jackalope Digital LLC. All rights reserved.
  1. Home
  2. πŸ’» Developer Tools
  3. Affset
A
Health: Not checked yetWe have not completed a health check for this listing yet.Last checked 8/11/2026, 12:23:07 AM

Affset

Enrichment pendingWe haven’t run our AI enrichment pass on this listing yet, so the overview, use cases, and FAQ below may be sparse or missing. We work through the catalog over time β€” check back soon.
View RepositoryVisit Website

Run affset from chat: stats, campaigns, zones, payouts, targeting, and team.

Quick Install

Automated & IDE Setup

Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β€” or use 1-click editor setup below.

Add to CursorAdd to VS Code
Manual Client & Custom JSON ConfigExpand JSON β–Ύ

Install Config Generator

Choose your client
claude_desktop_config.json
{
  "mcpServers": {
    "affset": {
      "command": "npx",
      "args": [
        "-y",
        "affset"
      ]
    }
  }
}

πŸ’‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)

Install Directory Badge Claim listing AlternativesπŸ’» More in Developer Tools

Documentation Overview

affset MCP server

An MCP server that lets a media buyer run affset from a chat client β€” pull stats, manage campaigns/zones/team, payouts, targeting, sub labels, and cut underperforming zones in plain language, no dashboard.

It's a thin wrapper over the existing affset tenant API (Bearer token + X-Namespace). One server instance serves one tenant.

Tools

ToolWhat it does
whoamiShow the tenant this server is bound to: namespace, API base, derived dashboard URL, and (when readable) company / timezone / custom API domain. Read-only.
get_statsTraffic stats grouped by a dimension (date, campaign, zone, country, sub1–5, advertiser, publisher, …), optionally narrowed with advertiser_email/publisher_email filters (one user, any group_by). Returns clicks, conversions, CR, payout, media cost and ROI as a table. Sub columns use the tenant's sub labels when configured. Per-user groupings and filters are owner/manager plus the matching side's manager role.
list_campaignsList campaigns (status / name filter, pagination).
get_campaignOne campaign's full record β€” every field (untruncated offer URL, exact schedule, budgets/pacing, silent flag, payout goal type) plus its targeting rules and payout rules, in one call.
list_zonesList traffic-source zones (status / name filter, pagination).
list_teamList team members (email, role, manager). Never returns API tokens.
create_team_memberInvite a team member (owner, manager, publisher, advertiser, publisher_manager, advertiser_manager). A scoped manager key can only create its own managed role, self-assigned. Returns the new API key once β€” list_team never shows it again. Dry-run by default; confirm: true to apply.
create_campaignCreate a campaign from an advertiser email, offer URL, geo, payout and name. Defaults: CPA / rate 0, paused, global payout rule, ready tracking link with source_click_id={clickid} + sub placeholders. Dry-run by default; confirm: true to apply.
set_campaign_statusRun or pause a campaign (action: "run" | "pause"). Dry-run by default; confirm: true to apply. Running can hit the plan's active-campaign limit.
update_campaignPartial update (name, offer URL, status, rate, budgets, dates, …). Dry-run by default; confirm: true to apply. Prefer set_campaign_status for run/pause.
create_zoneCreate a traffic-source zone (name + optional postback/site/traffic-back URLs). Always created active. Dry-run by default; confirm: true to apply.
update_zonePartial update (name, status, URLs). Dry-run by default; confirm: true to apply. Pass null to clear a URL.
get_zone_urlThe /serve URL to paste into a network's campaign settings β€” rotates across the zone's active campaigns. Prefilled sub convention, optional cost macro. Warns when no active campaigns are visible.
get_tracking_linkThe /track/click link for an existing campaign + zone β€” straight to one active campaign, with no rotation or targeting checks. Re-derives what create_campaign echoed on create.
cut_zonesBlacklist underperforming zones on a campaign by threshold (CR / spend / ROI). Dry-run by default; confirm: true to apply.
list_payout_rulesList a campaign's global + per-zone payout rules and its payout_goal_type.
set_payout_ruleUpsert a global or zone-specific payout. Dry-run by default; confirm: true to apply.
delete_payout_ruleDelete a global or zone-specific payout rule. Dry-run by default; confirm: true to apply.
set_payout_goalSet or clear payout_goal_type (goal-based conversions). Dry-run by default; confirm: true to apply.
list_targeting_typesCatalog of targeting rule types, flagging the seeded ones /serve never evaluates.
list_targeting_rulesList a campaign's targeting rules, flagging any that have no effect.
set_targeting_ruleUpsert one targeting rule (safe merge), normalised to what /serve matches. Dry-run by default; confirm: true to apply.
remove_targeting_ruleRemove one targeting rule by id or type+method. Dry-run by default; confirm: true to apply.
list_sub_labelsList tenant display names for sub1–sub5.
set_sub_labelsSet or clear sub labels (partial; null clears). Dry-run by default; confirm: true to apply.
list_conversionsList conversion audit records (payout, spend, pixel type, payload, postback). Optional client-side filters on the current page.

Which URL do I give the network?

get_zone_url (/serve/{zone})get_tracking_link (/track/click/{campaign}/{zone})
Picks the campaignaffset, from the zone's rotationyou, one fixed campaign
Needs an active campaignyes β€” otherwise traffic back / unsoldyes β€” otherwise 404
Needs an active zoneyesyes
Geo & targeting rulesenforcednot enforced
cost= lands onthe impression rowthe click row

Use one or the other for a given traffic stream β€” never both with cost=, or the media cost is counted twice.

Both use the tenant's custom API domain when one is set, since the URL gets pasted into the network verbatim. Macros ({clickid}, [CLICK_ID], ${SUBID}) are inserted without percent-encoding β€” the source expands them before the request reaches affset.

cut_zones only ever adds zones to a campaign's blacklist, and does a read-merge-write so existing targeting rules are never touched.

create_campaign needs a traffic-source zone for the tracking link: pass zone_id, or let it auto-pick when the namespace has exactly one active zone. Campaigns are created paused; activate them before sending traffic through either URL. Both URL types also require an active zone. Geo whitelist is enforced in /serve only β€” the direct tracking link is not geo-gated, but it still requires an active, currently serviceable campaign.

Documentation resources

Beyond the tools, the server exposes the affset API reference as MCP resources, so an assistant can answer "how does conversion tracking work?" or "what does /serve accept?" from the docs themselves β€” not just from the tool schemas.

Resource URITypeContent
affset://docs/api-referencetext/markdownThe full API reference β€” endpoints, auth, roles, examples.
affset://docs/api-reference.jsonapplication/jsonThe same reference as structured data, for programmatic use.

They're the exact content published at affset.com/docs, generated from one source, and fetched at read time from AFFSET_DOCS_URL ({origin}/api-reference.md and {origin}/api-reference.json) β€” so they always reflect the currently published docs, not a copy pinned to this package. The fetch sends no credentials (the docs are public and live on a different origin than the tenant API). HTML SPA fallbacks, redirects, invalid JSON, and oversized bodies are rejected. Both resources are always available, including under AFFSET_READ_ONLY.

Configuration

All config comes from environment variables (never hard-coded):

VariableDescription
AFFSET_BASE_URLOrigin of the affset API, e.g. https://api.affset.com (no path/query/credentials). Must be https unless the host is localhost/127.0.0.1/::1 β€” plain http would send the API key in cleartext.
AFFSET_API_KEYTenant API key. Its namespace must match AFFSET_NAMESPACE.
AFFSET_NAMESPACETenant namespace (lowercase letters, numbers, hyphens; 3–63 chars β€” same rules as signup).
AFFSET_READ_ONLYOptional, default false. Set to true/1 to register only the read-only tools (whoami, get_stats, every list_*, get_zone_url, get_tracking_link) β€” every create/update/delete/cut tool is unavailable, not just gated behind confirm. See Security for why this matters.
AFFSET_REQUEST_TIMEOUT_MSOptional, default 30000. Per-request HTTP timeout in milliseconds (1000–300000).
AFFSET_DOCS_URLOptional, default https://affset.com. Origin the API-reference documentation resources are fetched from (origin only, no path). Fetched anonymously β€” no API key is sent here.

See .env.example.

Install

From npm (recommended)

No clone, no build β€” your MCP client runs it with npx. For Claude Desktop (claude_desktop_config.json):

config.json
{
  "mcpServers": {
    "affset": {
      "command": "npx",
      "args": ["-y", "@affset/mcp"],
      "env": {
        "AFFSET_BASE_URL": "https://api.affset.com",
        "AFFSET_API_KEY": "sk_live_...",
        "AFFSET_NAMESPACE": "your-namespace"
      }
    }
  }
}

For Claude Code:

Terminal
claude mcp add affset \
  -e AFFSET_BASE_URL=https://api.affset.com \
  -e AFFSET_API_KEY=sk_live_... \
  -e AFFSET_NAMESPACE=your-namespace \
  -- npx -y @affset/mcp

Same env flags with -- npx -y github:affset/mcp if you install from GitHub instead of the npm registry (see below).

Add -e AFFSET_READ_ONLY=true for a stats/reporting-only instance (see Security).

From GitHub directly (no npm publish required)

npx can install straight from the git repo instead of the npm registry β€” useful if you'd rather not publish, or just want to track main without a release step:

config.json
{
  "mcpServers": {
    "affset": {
      "command": "npx",
      "args": ["-y", "github:affset/mcp"],
      "env": {
        "AFFSET_BASE_URL": "https://api.affset.com",
        "AFFSET_API_KEY": "sk_live_...",
        "AFFSET_NAMESPACE": "your-namespace"
      }
    }
  }
}

A push to main makes that commit available to this unpinned install path β€” no npm publish is required. On resolution, npm fetches the repository and runs the prepare script to build dist/ before starting the binary. npm may reuse its cache on later starts; an already running MCP process is not updated until it is restarted and npx resolves the dependency again.

For reproducible deployments, pin a reviewed ref instead of floating on main: github:affset/mcp#<commit-sha> or github:affset/mcp#<tag>. Restart the MCP process deliberately when you want it to resolve and run a newer revision.

From source

bash
git clone https://github.com/affset/mcp.git affset-mcp
cd affset-mcp
npm install        # builds via the prepare script

Then point your MCP client at the built entry file β€” swap the npx command above for "command": "node", "args": ["/absolute/path/to/affset-mcp/dist/index.js"].

Usage examples

list paused campaigns β†’ list_campaigns(status: "paused")

show me everything about campaign 42 β†’ get_campaign(campaign_id: 42)

show zones β†’ list_zones()

who's on the team? β†’ list_team()

add sarah@offer.com as a publisher β†’ create_team_member(email: "sarah@offer.com", role: "publisher") (dry-run) β†’ confirm

stats for today by sub1 β†’ get_stats(group_by: "sub1")

stats by advertiser β†’ get_stats(group_by: "advertiser_email")

stats for one publisher, grouped by zone β†’ get_stats(group_by: "zone_id", publisher_email: "publisher@example.com")

create a RichAds zone with postback β†’ create_zone(name: "RichAds", postback_url: "https://…/{source_click_id}") (dry-run) β†’ confirm

create a campaign for offer X, advertiser buyer@example.com, geo BR, payout $2 β†’ create_campaign(user_email: "buyer@example.com", offer_url: "https://offer.example/lp?s={click_id}", geo: ["BR"], payout: 2) (dry-run) β†’ confirm

what URL do I paste into RichAds? β†’ get_zone_url(cost: "{cost}")

give me the link for campaign 42 again β†’ get_tracking_link(campaign_id: 42)

run campaign 42 β†’ set_campaign_status(campaign_id: 42, action: "run") (dry-run) β†’ confirm

pause campaign 42 β†’ set_campaign_status(campaign_id: 42, action: "pause") (dry-run) β†’ confirm

set zone postback β†’ update_zone(zone_id, postback_url: "…") (dry-run) β†’ confirm

cut zones with CR < 0.2% and spend > $5 β†’ cut_zones(campaign_id, cr_max: 0.002, spend_min: 5) (dry-run) β†’ confirm

show payouts for campaign 42 β†’ list_payout_rules(campaign_id: 42)

set zone payout to $3 β†’ set_payout_rule(campaign_id: 42, payout: 3, zone_id: "…") (dry-run) β†’ confirm

only pay on deposit conversions β†’ set_payout_goal(campaign_id: 42, goal_type: "deposit") (dry-run) β†’ confirm

what targeting types exist? β†’ list_targeting_types()

whitelist BR+MX on campaign 42 β†’ set_targeting_rule(campaign_id: 42, type: "geo", method: "whitelist", rule: "BR,MX") (dry-run) β†’ confirm

name sub1 Zone, sub2 Creative β†’ set_sub_labels(sub1: "Zone", sub2: "Creative") (dry-run) β†’ confirm

show recent conversions β†’ list_conversions()

find $0 payouts (goal miss?) β†’ list_conversions(zero_payout: true)

lookup by source click id β†’ list_conversions(source_click_id: "abc123")

Notes & limits

  • get_stats groups by one dimension per call. Drill-down is a sequence of calls, each narrowing with campaign_ids / zone_ids / sub1..sub5 / conversion_type / advertiser_email / publisher_email filters. The two email filters select one user's campaigns or zones without changing group_by; access is limited to owner/manager or the corresponding scoped manager role. Filtering by conversion_type returns conversion rows only (impressions, clicks and media cost are zero).
  • spend means media_cost (your traffic cost). ROI / spend thresholds need cost data imported for the slice.
  • List endpoints have no server-side name search β€” name_contains filters the current page client-side.
  • Date-range presets, YYYY-MM-DD bounds and rendered timestamps all resolve in the tenant timezone (read once from /api/tenant), so a window lines up with the date buckets group_by=date returns instead of straddling two of them. Explicit timestamps must include Z or a UTC offset.
  • All mutations (creates, updates, cuts, deletes) stay on dry-run β†’ confirm: true. Creates are additive once confirmed and echo what was written.
  • Activating a campaign or creating a zone can return 402 plan limit β€” the error surfaces dimension / current / limit.
  • Payout resolution at conversion: zone-specific β†’ global β†’ $0. Goal type gates spend/payout by pixel type= match; non-matching events still record at $0. Payouts go down to $0.00001, so payout amounts print at up to five decimals.
  • Changing a payout is delete + create β€” the API has no update and the (campaign, zone) pair is unique. set_payout_rule restores the previous payout if the create fails, and says so loudly in the one case where it cannot.
  • Targeting is enforced on /serve only β€” not on direct tracking links. set_targeting_rule / remove_targeting_rule merge safely; other rules are kept.
  • Targeting values are matched exactly and case-sensitively at serve time (geo from CF-IPCountry, os/browser from the user agent, device type from a fixed set). set_targeting_rule normalises what it can (br,mx β†’ BR,MX, android β†’ Android) and rejects what could never match β€” an unmatched whitelist silently stops delivery.
  • capping, weekdays and hours are seeded but never evaluated by /serve. set_targeting_rule refuses to write them (they would read as working targeting while the campaign kept buying); list_targeting_types flags them. Use unique_users (visits/hours) for frequency capping.
  • list_conversions is the conversion audit trail (not aggregated stats). The API has no campaign/zone/date filters; optional filters apply to the current page only. Rows do not include campaign_id/zone_id. Publisher-side roles do not see spend and advertiser-side roles do not see payout, so zero_payout needs a role that can.
  • create_team_member creates the API key directly (like the dashboard's "Add Team Member") β€” it does not send an invite email. Hand the returned key to the person yourself. Revoking/removing a team member is not yet a tool; use the dashboard's Team page.
  • Out of scope: deleting campaigns/zones/conversions, billing, creative management.
  • Tenant signup is deliberately not a tool. POST /api/public/create-instance is Origin-gated and fails closed, which is what keeps signup browser-only; a server-side caller would have to spoof an allowlisted Origin to get past it. The endpoint also withholds the API key when email delivery is configured (it sends a magic link instead), and this server binds one namespace from the environment at startup β€” so it could not use a tenant it just created. Sign up in the dashboard, then point a server instance at the new namespace.

Development

Terminal
npm run type-check   # tsc --noEmit
npm run lint         # eslint src
npm run format       # prettier --write .
npm run build        # compile to dist/
npm test             # build + node --test over dist/**/*.test.js
npm run check-all    # lint + format:check + type-check + test β€” CI runs this
npm run dev          # watch mode

Security

  • No secrets in the repo; credentials come from the environment at runtime.
  • AFFSET_BASE_URL must be https unless the host is loopback β€” no cleartext API key.
  • stdout is the JSON-RPC channel β€” all logs go to stderr.
  • list_team redacts API tokens.
  • All mutations (including creates) follow show β†’ confirm β†’ apply.
  • Create a dedicated, least-privilege API key for the MCP rather than reusing an owner key, and give it an expiry β€” affset's RBAC roles (owner/manager/publisher/ advertiser) apply to MCP tool calls exactly as they do to the dashboard.
  • Pin GitHub installs to a reviewed commit or tag in long-lived environments. A floating main spec can run newer repository code the next time npx resolves it.

Prompt injection via conversion/click data

get_stats, list_conversions and cut_zones surface data that ultimately comes from public, unauthenticated endpoints β€” a traffic source's click macros (sub1–sub5, source_click_id) and a conversion pixel's raw query string (list_conversions' payload detail). Anyone who can generate a click or fire a pixel controls those bytes, and they land in the model's context when you ask about stats or conversions.

Mitigations in place:

  • Untrusted fields are length-capped and escaped before rendering (mdCell, capUntrusted in src/lib/format.ts), and the conversion-payload block carries an explicit "treat as data, not instructions" notice.
  • confirm: true on mutating tools is a model-level safety net, not a security boundary β€” a model that has been steered by injected content can supply confirm: true itself. The only real boundary is your MCP client's per-call tool approval and AFFSET_READ_ONLY.

Set AFFSET_READ_ONLY=true for any session where you're mainly reading stats/ conversions, especially with an MCP client that auto-approves tool calls. It removes every mutation tool from the server entirely β€” not hidden behind a prompt, unavailable to call. Reserve a read-write instance (or a separate one) for sessions where you're actively managing campaigns/zones/payouts and are reviewing each confirm yourself.

Related MCP Servers

View all in Developer Tools View all alternatives
  • Claude Task Master logoClaude Task Master

    AI-powered task management system for AI-driven development. Features PRD parsing, task expansion, multi-provider support (Claude, OpenAI, Gemini, Perplexity, xAI), and selective tool loading for optimized context usage.

    πŸ’» Developer Tools7 views
    Compare vs Claude Task Master β†’
  • A
    Ai Netcafe

    Compare LLM cost & latency on one prompt, translate PDF keeping layout, cited research, make PPTX

    πŸ’» Developer Tools0 views
    Compare vs Ai Netcafe β†’
  • M
    Mcp

    Analyze your campaigns any way you want, with AI.

    πŸ’» Developer Tools1 views
    Compare vs Mcp β†’
  • Shadcn Ui Mcp Server logoShadcn Ui Mcp Server

    MCP server that gives AI assistants seamless access to shadcn/ui v4 components, blocks, demos, and metadata.

    πŸ’» Developer Tools2 views
    Compare vs Shadcn Ui Mcp Server β†’

Frequently Asked Questions about Affset

Add the following block to your claude_desktop_config.json under mcpServers: "mcpServers": { "affset": { "command": "npx", "args": ["-y", "affset"] } }

AllMCPs Directory Badge

Full Badge Customizer

Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.

Badge Style:
Live Dynamic SVG PreviewAffset AllMCPs Directory Badge
Markdown (GitHub README)
[![AllMCPs](https://allmcps.com/api/badge/affset?style=directory)](https://allmcps.com/mcp/affset)
HTML Embed
<a href="https://allmcps.com/mcp/affset"><img src="https://allmcps.com/api/badge/affset?style=directory" alt="Affset on AllMCPs" /></a>

Technical Specs & Signals

CategoryπŸ’»Developer Tools
More technical detailsExpand β–Ύ
TransportSTDIO
RuntimeNode.js
0/4 checks healthy over the last 6h
Views0
Unique ViewsTotal visits recorded for this listing page on AllMCPs.
Installs0
Installs & Copy ActionsTotal times users copied install commands or configuration snippets for this server.
27Quality signal: Emerging Β· 27/100How this signal is calculated β–Ύ
Server availabilityNot measured

Not scored for repo-hosted servers β€” we can't reach the running server, only its GitHub page. Hosted MCP endpoints are health-checked live.

Verified ownership8/20
Documentation & tools11/30
Adoption & activity1/15
Community engagement0/10

A guidance signal from public completeness & health data β€” not a user rating. New listings start lower and rise as they add docs, get verified, and grow adoption. Signals we can't observe for a listing are skipped, not counted against it.

β˜… Spotlight Slot

Feature Your MCP Server

Get maximum visibility for your server across our directory, search results, and detail pages.

Spotlight Your Server

Own this project?

This directory is pre-filled from public sources. Claim via GitHub README, site badge, or DNS TXT to get the verified badge.

Free dofollow backlink: after claiming, verify your product site and place a dofollow AllMCPs badge β€” we recheck it stays live.

Claim & get free dofollow

Share & Embed

Add our SVG badge (dark/light directory styles) or embeddable widget to your site.

Explore more

More in πŸ’» Developer Tools β†’Best MCP servers for Developers β†’Alternatives to Affset β†’Install in Claude DesktopInstall in CursorInstall in VS Code