Skip to main content
Glama
Veezee
by veezeehq

Veezee MCP server

LinkedIn, Reddit, and X (formerly Twitter) data for AI agents, over MCP or REST. This repo is the public home and issue tracker for the hosted servers on the official MCP Registry: io.veezee/linkedin (3.1.0), io.veezee/reddit (1.1.0), and io.veezee/x-twitter (1.1.0). The server is a hosted service; this repo also ships a small stdio proxy (npx github:veezeehq/veezee-mcp) for clients that spawn a local command.

  • Every call needs a free key, and minting one costs nothing: no signup, no card, no human. See Quickstart below. The free tier is 200 credits per IP per day across all platforms, cached data, first page only. Paying at https://veezee.io/upgrade credits the same key with a higher budget, realtime freshness, and full pagination.

  • Website and docs: https://veezee.io

  • Found a bug or a gap? Open an issue or write hello@veezee.io.

Run locally (stdio)

For MCP clients that spawn a local command instead of connecting to a URL:

npx github:veezeehq/veezee-mcp

The proxy connects to https://mcp.veezee.io/all and mints a free trial key on first run (no signup). Set VEEZEE_API_KEY to reuse one key across runs, and VEEZEE_MCP_URL to point at a single-platform mount. Docker: docker build -t veezee-mcp . && docker run -i veezee-mcp.

Related MCP server: socialcrawl-mcp

Mounts

Four endpoints, all streamable-http, same auth and pricing:

mount

covers

https://mcp.veezee.io/linkedin

LinkedIn only (5 tools + get_usage)

https://mcp.veezee.io/reddit

Reddit only (6 tools + get_usage)

https://mcp.veezee.io/x

X (formerly Twitter) only (5 tools + get_usage)

https://mcp.veezee.io/all

Every platform (17 tools + get_usage)

Pick a single-platform mount when your agent only needs one platform: a smaller tool list is easier for the model to pick from correctly and costs less context per turn. Pick /all when one task spans platforms, e.g. a research brief that pulls LinkedIn, Reddit, and X signal on the same account, or a monitoring loop that watches more than one platform at once.

The 17 tools

LinkedIn (https://mcp.veezee.io/linkedin)

tool

what it does

credits

linkedin_resolve_url

identify a LinkedIn URL

2

linkedin_get_profile

get a person profile

4 base (2 sections included, +2/section, max 4)

linkedin_search_people

search people

10 base (10 results included, +1/10 more, max 30)

linkedin_get_company

get a company

4 base (+4 to resolve a new domain)

linkedin_get_posts

recent posts by a person or company

4/page (+4 to resolve a new domain)

Reddit (https://mcp.veezee.io/reddit)

tool

what it does

credits

reddit_search

search posts, comments, subreddits, or users

6/page

reddit_get_subreddit

get subreddit details

4 base (+2 for rules and moderators)

reddit_get_subreddit_posts

get a subreddit's posts

4/page

reddit_get_user

get a Reddit user

4 base (+2/section, max 2)

reddit_get_post

get posts by id, with an optional discussion thread

4 for up to 10 ids (+1/10 more, max 100; +4 for the full thread or one comment in context)

reddit_resolve_url

identify a Reddit URL

2

X, formerly Twitter (https://mcp.veezee.io/x)

tool

what it does

credits

x_search

search X (formerly Twitter)

6/page

x_get_profile

get an X profile

4

x_get_tweets

get an account's tweets

4/page

x_get_tweet

get one tweet with full metrics

4

x_resolve_url

identify an X URL

2

Every mount

tool

what it does

credits

get_usage

check credits and recent charges

0

Any tool call can set freshness: "realtime" for +2 credits to force a live fetch instead of cached data. Full tool reference with schemas: https://veezee.io/docs

Quickstart

Every tool call needs a key, and getting one costs nothing. Mint one directly:

curl -s -X POST https://api.veezee.io/v1/keys/mint

That returns a vz_trial_... key with the same free-tier budget as before: 200 credits per IP per day, cached data, first page only. Drop it into your MCP client config as a bearer header, then reconnect. Example for /all (swap in /linkedin, /reddit, or /x for a single-platform mount):

{
  "mcpServers": {
    "veezee": {
      "url": "https://mcp.veezee.io/all",
      "headers": { "Authorization": "Bearer vz_trial_..." }
    }
  }
}

Don't want to mint a key by hand first? If your client supports MCP authorization (Claude Code, claude.ai connectors), just connect: the server answers unauthenticated requests with a sign-in challenge and the client opens a Veezee sign-in in your browser (email code, no password, no card). Clients without that support get a KEY_REQUIRED error whose message spells out the mint step (POST /v1/keys/mint) plus a mint_url. Either route, you get from zero to a working connection with no signup form and no card.

Paying at https://veezee.io/upgrade credits the same key, trial straight to flex; nothing to reconfigure. Realtime freshness and full pagination come with a paid balance.

Install

Examples below use /all; swap in /linkedin, /reddit, or /x for a single-platform mount.

Claude Code:

claude mcp add --transport http veezee https://mcp.veezee.io/all

Codex CLI:

codex mcp add veezee --url https://mcp.veezee.io/all

Cursor (.cursor/mcp.json or ~/.cursor/mcp.json):

{
  "mcpServers": {
    "veezee": { "url": "https://mcp.veezee.io/all" }
  }
}

VS Code (.vscode/mcp.json):

{
  "servers": {
    "veezee": { "type": "http", "url": "https://mcp.veezee.io/all" }
  }
}

claude.ai: Settings > Connectors > Add custom connector > https://mcp.veezee.io/all (or a single-platform mount).

You can connect any of the clients above before you have a key: OAuth-capable clients sign in on first contact, and the rest get a KEY_REQUIRED error that spells out the mint step, as described in Quickstart; add the Authorization header once you have the key.

More clients (Windsurf, Cline, Zed, plain REST), each snippet verified against the client's official docs: https://veezee.io/docs/clients

REST twin

Every tool has a REST route with identical semantics at https://api.veezee.io (contract: https://veezee.io/openapi.json). A typed TypeScript SDK and CLI ship as @veezee/sdk (docs: https://veezee.io/docs/sdk).

Available Tools

10 tools
get_usageCheck credits and recent chargesA
Read-only
Inspect

Check your balance, plan, limits, and the last 10 charges (receipt ids included). Costs 0 credits and is exempt from the per-minute rate limit, so call it first to check your budget before running data tools, and any time after. Works the same on a trial key, a paid key, or an OAuth-connected account. The response includes upgrade_url (give it to your human when credits or plan limits block you; purchases credit this account directly with no login) and manage_url (give it to your human to change or cancel a paid plan in the Stripe billing portal). Trial accounts also get a claim_url that attaches an email so the account can be recovered if the key is lost. Not for fetching platform data.

Inputs: no named parameters. Returns: usage, common, entity, platform, +5 more

linkedin_get_companyGet a LinkedIn companyA
Read-only
Inspect

Fetch one company's LinkedIn page: name, description, industry, employee count, headquarters, website, founding year, specialities, and the URN/numeric id you need for linkedin_search_people company filters. identifier accepts a company URL, the slug after /company/ (e.g. 'microsoft'), or a website domain like 'microsoft.com'; numeric ids and URNs are search-filter inputs, not fetch identifiers. Domains are resolved to a company and verified against that company's website: a domain identifier always QUOTES base+4 credits (set max_credits accordingly), and the 4-credit resolution surcharge is refunded at settlement when the domain was resolved before, so known domains settle at the base price. A domain that cannot be verified to a company returns INVALID_INPUT with the closest matches instead of a guessed company. Costs 4 credits base. Do not guess a slug from a brand name: slugs are vanity strings and a famous name can belong to an unrelated company's page (linkedin.com/company/anthropic is a small investment fund, not the AI lab). When you only know the company's name, pass its website domain instead -- the verified form -- and sanity-check the returned industry and description against what you expected. This tool does not search by name: if you only have an approximate company name, use linkedin_search_people's current_company filter with keywords (names are matched natively there) or give the exact slug. For the company's posts, use linkedin_get_posts with the same identifier (URL, slug, or website domain all work there too).

Inputs: identifier (required), freshness, max_credits. Returns: usage, common, entity, platform, +5 more

linkedin_get_postsGet recent posts by a person or companyA
Read-only
Inspect

Fetch the recent LinkedIn posts of one person or one company. identifier accepts a profile or company URL, a slug, a person URN, or a company website domain like 'microsoft.com'; the entity type is detected automatically. A domain resolves to its verified company first, exactly like linkedin_get_company: it QUOTES base+4 credits (set max_credits accordingly) and the surcharge is refunded at settlement for already-known domains, so they settle at the base price. Company URNs and numeric company ids are search-filter inputs, not fetch identifiers: use the company slug, URL, or domain here. Returns one page of posts (text, created_at, author, likes, comments_count, shares, is_repost, url) with a cursor for older posts. Costs 4 credits per page. Use this for 'what has X been posting', voice-of-company research, or activity checks before outreach. Not for reading one specific post you already have a URL for, and not for keyword search across LinkedIn; neither is supported in v1.

Inputs: identifier (required), cursor, freshness, max_credits. Returns: usage, common, entity, platform, +5 more

linkedin_get_profileGet a LinkedIn person profileA
Read-only
Inspect

Fetch one person's LinkedIn profile. identifier accepts a profile URL, the slug after /in/ (e.g. 'williamhgates'), or a urn:li:fsd_profile URN; URLs are cleaned automatically. Always returns the overview (name, headline, location, current position, follower counts) plus up to 2 requested sections from about|experience|education|skills at no extra cost; each section beyond 2 adds 2 credits (max 4 sections). Costs 4 credits base. If you only have a name, use linkedin_search_people first; this tool does not search. Results from linkedin_search_people with is_anonymous=true cannot be fetched here; treat them as 'someone matching this exists' and stop. Companies belong to linkedin_get_company.

Inputs: identifier (required), sections, freshness, max_credits. Returns: usage, common, entity, platform, +5 more

linkedin_search_peopleSearch people on LinkedInA
Read-only
Inspect

Find people on LinkedIn by keywords and filters. The right tool when you have a name, role, or 'who is the X at Y' question without a profile URL. Pass keywords (free text: name, title, or both) and any of first_name, last_name, title, school, current_company, past_company. If keywords is omitted it is derived from the name or title filters; school or company filters alone are rejected with INVALID_INPUT, so include keywords with those. Company filters accept a company name, slug, numeric id, or URN. current_company names are matched by LinkedIn's own company search: typo-tolerant and fuzzy, so results can include people whose headline merely mentions the company; when you need exact filtering, pass the numeric id or URN (linkedin_get_company returns both). past_company names are resolved to an id for you. Costs 10 credits including the first 10 results; each further 10 results add 1 credit (limit max 30; trial keys max 10). A cursor page is a NEW call priced the same way by its own limit, so one limit=30 call is much cheaper than three limit=10 pages; prefer a larger limit over paginating. Do NOT combine a past_company NAME or a company-URL filter with limit=30: resolving those spends one of the call's three internal fetches, so that combination is rejected; keep limit<=20 with them or pass the numeric id. current_company names never spend a fetch, so they combine with any limit. Returns name, position, location, urn, public_identifier per result, a cursor for the next page, and total_matches. Results with is_anonymous=true are private profiles; do not pass them to linkedin_get_profile. For one known person with a URL/slug, call linkedin_get_profile directly instead.

Inputs: limit, title, cursor, school, +7 more. Returns: usage, common, entity, platform, +5 more

reddit_get_subredditGet subreddit detailsA
Read-only
Inspect

Fetch one subreddit's profile: title, description, subscriber and active-user counts, age, NSFW flag, and topics. subreddit_name is the name without the r/ prefix, e.g. 'selfhosted'; a full reddit.com URL also works. Set include_settings to also get the community rules and moderator list for +2 credits (useful before posting or judging moderation culture). Costs 4 credits base. Subscriber counts here are the standard sizing signal for market research. This tool does not return posts: read the feed with reddit_get_subreddit_posts, and discover subreddits you don't know by name with reddit_search type=subreddits.

Inputs: subreddit_name (required), freshness, max_credits, include_settings. Returns: usage, common, entity, platform, +5 more

reddit_resolve_urlIdentify a Reddit URLA
Read-only
Inspect

Identify what a Reddit URL points at before fetching it. Give any reddit.com or redd.it URL (share links, old.reddit.com, trailing params are fine); get back {type: subreddit|user|post|comment, id, handle, canonical_url}. Post URLs yield the t3_ id for reddit_get_post; comment permalinks yield the t1_ id; subreddit and user URLs yield the name for reddit_get_subreddit or reddit_get_user. Costs 2 credits and parses offline without fetching the page. Skip this tool when you already have a t3_/t1_ id, subreddit name, or username: the other Reddit tools accept those directly. Not for non-Reddit URLs; it returns INVALID_INPUT for those.

Inputs: url (required). Returns: usage, common, entity, platform, +5 more

x_get_tweetGet one tweet with full metricsA
Read-only
Inspect

Fetch one tweet by id with full engagement metrics: views, likes, retweets, quotes, replies, bookmarks, language, and the quoted tweet inline when there is one. tweet_id is the numeric id from a tweet URL (the digits after /status/) or from any other X tool's results; full tweet URLs are accepted too. Costs 4 credits. Use this to verify engagement before citing a tweet or to read a quoted thread hop by hop. It returns a single tweet, not the conversation around it: for the author's other tweets use x_get_tweets, and to find tweets by topic use x_search.

Inputs: tweet_id (required), freshness, max_credits. Returns: usage, common, entity, platform, +5 more

x_get_tweetsGet an account's tweetsA
Read-only
Inspect

Fetch one page of an X account's timeline. identifier is a screen name, profile URL, or numeric id (auto-detected). mode picks the view: posts (default) is the account's own tweets, posts_and_replies includes their replies, highlights is the account's pinned highlights tab. include_retweets (default true) filters retweets out when false. Costs 4 credits per page; a cursor page is a NEW call priced the same way. Returns tweet summaries with engagement counts and a cursor for older tweets. Use this for 'what has X been posting', voice checks before outreach, or drafting replies in an account's register. For keyword search across all of X use x_search; for one specific tweet you already have, x_get_tweet.

Inputs: identifier (required), mode, cursor, freshness, +2 more. Returns: usage, common, entity, platform, +5 more

x_resolve_urlIdentify an X URLA
Read-only
Inspect

Identify what an X (formerly Twitter) URL points at before fetching it. Give any x.com or twitter.com URL (mobile links, query params, /i/web/status forms are fine); get back {type: profile|tweet, id, handle, canonical_url}. Tweet URLs yield the numeric id for x_get_tweet; profile URLs yield the handle for x_get_profile or x_get_tweets. Costs 2 credits and parses offline without fetching the page. t.co short links cannot be expanded offline and return INVALID_INPUT telling you so; expand them in your own browser step first. Skip this tool when you already have a handle or tweet id: the other X tools accept those directly.

Inputs: url (required). Returns: usage, common, entity, platform, +5 more

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.5/5.0

    Scored across 10 tools

    Disambiguation5/5

    Each tool maps to a distinct platform, entity, and action. The search-vs-fetch boundaries are explicit, and the singular/plural x_get_tweet vs x_get_tweets pair is clearly differentiated by description.

    Naming Consistency4/5

    Names broadly follow a snake_case platform_verb_object pattern, and parallel resolvers are consistently named. Minor inconsistencies exist in pluralization (x_get_tweet vs x_get_tweets vs linkedin_get_posts) and get_usage lacks a platform prefix.

    Tool Count5/5

    Ten tools is within the ideal range, and each tool has a clear purpose. The count fits a multi-platform social data API without feeling bloated or thin.

    Completeness2/5

    The Reddit and X surfaces are notably incomplete: reddit_resolve_url returns post/comment/user IDs but the corresponding reddit_get_post and reddit_get_user tools are absent, and x_resolve_url references x_get_profile and x_search which are also missing. LinkedIn is better covered, but the multi-platform promise is undermined by these dead ends.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI agents to enrich LinkedIn prospect data with current role, company, and experience through MCP or REST, with credit-metered access and free credits.
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      Provides AI agents with unified access to 21 social media platforms and 105 endpoints for retrieving profiles, posts, comments, search results, trending content, and analytics without per-platform authentication.
      4
      583 npm
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Live LinkedIn data for AI agents: 44 tools for profiles, companies, jobs, posts, people search, job-change signals and email finding. Hosted remote server (streamable HTTP) - your agent never touches your own LinkedIn account. 300 free credits on signup, no card. Dockerfile in repo bridges stdio clients to the hosted endpoint via mcp-remote.
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables AI agents to retrieve X/Twitter profiles and tweets, YouTube video and channel data, and TikTok profile and video stats on a pay-per-result basis without requiring login or platform API keys.
      99 npm
      MIT