Veezee
Provides tools for Reddit data access, including searching posts/comments/users/subreddits, retrieving subreddit details and posts, getting user profiles, and resolving URLs.
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-mcpThe 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 |
| LinkedIn only (5 tools + |
| Reddit only (6 tools + |
| X (formerly Twitter) only (5 tools + |
| Every platform (17 tools + |
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 |
| identify a LinkedIn URL | 2 |
| get a person profile | 4 base (2 sections included, +2/section, max 4) |
| search people | 10 base (10 results included, +1/10 more, max 30) |
| get a company | 4 base (+4 to resolve a new domain) |
| 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 |
| search posts, comments, subreddits, or users | 6/page |
| get subreddit details | 4 base (+2 for rules and moderators) |
| get a subreddit's posts | 4/page |
| get a Reddit user | 4 base (+2/section, max 2) |
| 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) |
| identify a Reddit URL | 2 |
X, formerly Twitter (https://mcp.veezee.io/x)
tool | what it does | credits |
| search X (formerly Twitter) | 6/page |
| get an X profile | 4 |
| get an account's tweets | 4/page |
| get one tweet with full metrics | 4 |
| identify an X URL | 2 |
Every mount
tool | what it does | credits |
| 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/mintThat 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/allCodex CLI:
codex mcp add veezee --url https://mcp.veezee.io/allCursor (.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).
Links
Agent setup guide: https://veezee.io/agent-setup/prompt.md
Operating rules for agents: https://veezee.io/AGENTS.md
Pricing: https://veezee.io/pricing
What we store and how keys are handled: https://veezee.io/trust
Skills packs: https://github.com/veezeehq/veezee-skills
Available Tools
10 toolsget_usageCheck credits and recent chargesARead-onlyInspect
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 companyARead-onlyInspect
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 companyARead-onlyInspect
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 profileARead-onlyInspect
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 LinkedInARead-onlyInspect
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 detailsARead-onlyInspect
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 URLARead-onlyInspect
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 metricsARead-onlyInspect
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 tweetsARead-onlyInspect
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 URLARead-onlyInspect
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
Scored across 10 tools
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.
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.
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.
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
Related MCP Connectors
Live LinkedIn data for AI agents: profiles, companies, jobs, posts, email finding. No account risk.
Twitter/X, Instagram, Reddit & TikTok data for AI agents. Billions of posts. No API keys.
Give your AI agent live public data from 70+ platforms: from TikTok, Instagram, YouTube, LinkedIn, X, Reddit, Amazon, Google and more, One key, one response format, 1,000 free credits every month.
Give your agent live data from Twitter, Reddit, the web and GitHub. No API keys, no scraping stack.
Related MCP Servers
AlicenseNot gradedqualityDmaintenanceEnables 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- AlicenseAqualityDmaintenanceProvides 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.4583 npmMIT
- AlicenseNot gradedqualityCmaintenanceLive 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
- AlicenseNot gradedqualityCmaintenanceEnables 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 npmMIT