Overview
Nooticr MCP is a Model Context Protocol server that lets an AI assistant read public social posts across 10 networks and product listings across 12 marketplaces, and act on what it finds.
It connects over Streamable HTTP at https://mcp.nooticr.com/mcp, authenticates with OAuth 2.1 (or an API key, for a server with no browser), and exposes 90 tools. Assistants use it to fetch a post's media and spoken transcript, read its comment section, survey a niche, scan a shopping category down to its review text, and then produce work from that: alternative hooks, variants to film, a draft scored before publication.
Networks covered: TikTok, Instagram, YouTube, X, Reddit, Weibo, LinkedIn, Douyin, Xiaohongshu, Bilibili.
For IT administrators
If you are deciding whether to approve this server for your organisation, this section is the short version. Everything here is enforced in the implementation, not policy alone.
What it does
- Reads public posts your users or their assistant explicitly request, by URL or search term
- Returns that content to the assistant to reason over — it runs no model of its own
- Draws on the signed-in user's own credit balance
- Returns structured data and rendered cards to the assistant
What it cannot do
- Hold your social credentials. An account can be linked, but only by sending you to the platform's own consent screen — the token it issues is held by Nooticr and never reaches the assistant
- Post, comment, like, follow or message anywhere, on anyone's behalf
- Read private messages, drafts, or non-public profile data
- Access anything on the user's device or network
- Reach other systems in your environment — it only calls out to the services listed below
Nothing it writes leaves Nooticr. Of the 90 tools, 71 carry readOnlyHint: true. The 19 that do not include writes to the user's own Nooticr account, consent-flow setup, and two paid marketplace scans that collect public listings and reviews. Eight carry destructiveHint: true because they replace a saved marker, portfolio, product value, analysis, or content plan, or stop something the user started. None writes to your organisation's systems, and none can post, comment, like, follow or message anywhere.
Access and revocation
Interactive clients authenticate with OAuth 2.1 with PKCE (S256) and dynamic client registration — no key is ever pasted into a chat window, and the tokens it issues are scoped and expiring.
A server-side integration has no browser to run that flow in, so it authenticates with an API key instead: one credential, sent as Authorization: Bearer nk_…, minted from an account that did sign in once. A key is scoped to one account and one workspace, stored only as a hash, and cannot create or revoke keys — so a leaked key cannot outlive being revoked. See Server-side integrations.
Two scopes are granted, and they describe exactly what the tools do:
social:read— read public posts, transcripts, comments, creators, sounds and hashtagscredits:spend— run the tools that draw on the user's credit balance
To revoke: the user removes the connector in their AI client, which invalidates its tokens immediately; an API key is revoked with npx -y @nooticr/mcp api-key revoke <id>, which takes effect at the API on the spot. To remove the account and its data entirely, email support@nooticr.com.
Data handling
| Data | Stored? | Retention |
|---|---|---|
| Account identity (email, display name, user id) | Yes | Until the account is deleted |
| OAuth tokens issued to the AI client | Yes | Until expiry or revocation |
| API keys (stored as a sha256 hash, never in the clear) | Yes | Until revoked or deleted with the account |
| Credit ledger (tool name, credits, timestamp) | Yes | Retained as a financial record |
| URLs and search terms passed to tools | No | Processed, not retained after the call |
| Content of retrieved posts | No | Streamed through; media cached only transiently so it can be displayed |
| Chat conversation content | No | The server sees the tool call, not the surrounding conversation |
| Payment card details | No | Stripe handles payment; Nooticr receives only a reference |
| Operational logs (timestamps, status codes, errors) | Yes | Up to 30 days |
Data is not sold, not shared for advertising, and not used to train models.
Subprocessors and egress
The server calls out to these services and no others:
| Service | Purpose |
|---|---|
| Cloudflare | Hosting and edge delivery of this server |
| api.nooticr.com | The Nooticr API — accounts, credits, tool execution |
| Stripe | Payment processing |
| Social data provider | Retrieving public posts from the supported networks |
| AI provider | The analysis and generation tools |
If you allowlist egress, the assistant only needs to reach mcp.nooticr.com. Everything else is server-to-server.
Cost control
Spend is bounded by the user's prepaid credit balance — there is no invoice, no overage and no auto-renewal. A user cannot spend more than they have loaded. Every tool declares its price in its own description and in _meta.nooticr/creditCost, so an assistant can budget before calling. Failed calls are refunded automatically, and a call interrupted mid-flight is billed once at most.
Third-party content
Retrieved posts are published by third parties and may contain personal data about the people who published them. Nooticr processes it only to answer the request. Your users are responsible for using it lawfully — see the acceptable use section of the Terms. Nooticr is not affiliated with, endorsed by or sponsored by any of the platforms; their names and marks identify coverage only.
Connecting
Claude.ai and Claude Desktop
Settings → Connectors → Add custom connector, then paste:
https://mcp.nooticr.com/mcpSign in with Nooticr when prompted. No key to copy.
Claude Code
/plugin marketplace add Nooticr/nooticr-mcp
/plugin install nooticr@nooticrChatGPT
Settings → Connectors → Advanced → Developer mode, then add the same URL.
Cursor and other stdio clients
{
"mcpServers": {
"nooticr": {
"command": "npx",
"args": ["-y", "@nooticr/mcp"]
}
}
}Then npx -y @nooticr/mcp login once to sign in.
Server-side integrations (no browser)
The OAuth flow needs a browser once and leaves behind a token that has to keep being refreshed. If your integration runs on a server, mint an API key instead. The quickest way is the API keys card on your dashboard — sign in, name the key, copy it. From a terminal, the same thing:
npx -y @nooticr/mcp login
npx -y @nooticr/mcp api-key create --name "my-service"The key is printed once and stored only as a hash, so it cannot be shown again. Give it to the deployment and there is nothing left to configure:
POST https://mcp.nooticr.com/mcp
Authorization: Bearer nk_…Or, for a local stdio process, set NOOTICR_API_KEY — or run npx -y @nooticr/mcp login --api-key nk_… where a client will not inherit your shell environment. There is no consent screen, no redirect URI and no refresh: the key is valid until npx -y @nooticr/mcp api-key revoke <id>. Pass --expires-in-days at creation if you would rather it also expire on its own.
Marketplaces
Twelve shopping sites, read the same way a post is: the products, their prices, the full star histogram and the review text itself — not a summary of it.
One marketplace argument picks the site, so an assistant chooses a site rather than choosing between twelve near-identical tools. Amazon has a tool of its own, scan_amazon_category, because it returns Amazon's own review-aspect counts on top of the same shape.
| Site | marketplace | What to pass as the product id |
|---|---|---|
| Amazon | amazon | an ASIN or a full Amazon product URL Storefronts — domain: a country code or host — com (US), co.uk, de, fr, it, es, ca, co.jp, in, com.br, com.mx, com.au, nl, se, pl, com.be, com.tr, ae, sa, eg, sg, cn. Default www.amazon.com |
| AliExpress | aliexpress | the numeric id from /item/<id>.html, or a full AliExpress product URL One storefront; takes no market argument. |
| Cdiscount | cdiscount | the SKU from a product URL's /f-<category>-<sku>.html, or the full URL One storefront; takes no market argument. |
| Flipkart | flipkart | the 16-character PID from a product URL's pid= parameter, or the full URL One storefront; takes no market argument. |
| Mercado Libre | mercadolibre | a site id such as MLA904253674, or a full Mercado Libre product URL Storefronts — market: one of eighteen markets, named however it comes to hand — MLB, br, Brazil or mercadolivre.com.br. Inferred from the ids when omitted, and a job runs against one market: an id from another is refused rather than mis-filed |
| Lazada | lazada | the number after -i in a product URL (13711387806 in /products/<slug>-i13711387806.html), or the full URL Storefronts — market: sg, my, th, vn, ph or id. An item id is scoped to one of them — the same id on another Lazada host is a different product or nothing at all |
| Otto | otto | the tail of the product path — C1720803139 on otto.de, or the SKU AKLBB2029107352 on ottoversand.at Storefronts — market: de or at. The two are not interchangeable: an id from one does not address a product on the other |
| Rakuten | rakuten | on Ichiba `<shopId>_<itemId>` (411453_10000003) or `<shop>/<manageNumber>`; on Taiwan `<shop>/<productCode>`. A full product URL works too Storefronts — market: jp (Ichiba) or tw. Taiwan publishes no review text, so a category study there reads on price and rating alone |
| Trendyol | trendyol | the number after -p- in a product URL (819066262 in /brand/name-p-819066262), or the full URL Storefronts — market: one of 47 storefronts — tr, de, ae, sa, at, be, fr, it, nl, pl, ro and the rest. An id is scoped to one: the same number 404s on another country's |
| Jumia | jumia | a SKU such as OR537EA86PWGTNAFAMZ. A product URL does NOT contain it — the number at the end of a product path is a different handle — so reach a product through `query` instead Storefronts — market: ng, eg, ke, ma, ci, gh, sn, tn, ug or dz |
| Vinted | vinted | the numeric id from /items/<id>, or a full Vinted item URL Storefronts — market: one of 27 European storefronts — fr, de, es, it, pl, co.uk, com (US), com.au and the rest. A listing belongs to exactly one: the same item id does not exist on another country's Vinted |
| Temu | temu | the goods id after -g- in a product URL, or the full URL One storefront; takes no market argument. |
Search in the site's own language. A query in the wrong language does not error — it returns the few imported listings that happen to match, which reads as a thin category and is really a bad search. Each site's expected language: Amazon the storefront's own — English on com, co.uk, ca, in, com.au and sg, otherwise the country's · AliExpress English · Cdiscount French · Flipkart English · Mercado Libre Spanish, except Brazil (MLB), which is Portuguese · Lazada English on sg and ph; Thai, Vietnamese, Indonesian or Malay on th, vn, id and my · Otto German, on both storefronts · Rakuten Japanese on jp, Traditional Chinese on tw · Trendyol Turkish on tr; the storefront's own language elsewhere · Jumia English on ng, ke, gh and ug; French on ci, sn, ma, tn and dz; Arabic or French on eg · Vinted the storefront's own — French on fr, German on de, Polish on pl, and so on · Temu English.
Collection is a real browser render behind each site's bot defences, so it runs as a background job: a scan returns what is ready plus a scanId, and the poll that finishes it is free. 3 credits per product collected; a single product by id is 3.
Tool reference
90 tools. Costs are in credits and match what the server charges; an argument marked ? is optional.
Read a post
Retrieve what a post contains. No interpretation, no AI.
| Tool | Cost | Inputs | What it does |
|---|---|---|---|
get_social_media | 1 cr | url | A post's media, caption, author and engagement counts. You want the post itself, not an interpretation of it. |
get_post_transcript | 1 cr | url, language? | The words actually spoken, read from the post's caption track (TikTok, YouTube). The exact wording matters — a hook, a claim, a CTA. Cheaper and more literal than any AI tool. |
get_post_comments | 2 cr | url, limit? | Top comments, the themes the platform clusters them into, and which the creator pinned or liked. You want to read what people wrote. Use summarize_post_comments to have it synthesised instead. |
get_post_frames | 2 cr | url, count? | Frames from the post's video as real images, chosen by scene change rather than by the clock. Roughly 1,200 tokens of context each. The frames are all you want. analyze_post pairs them with the transcript for one credit more. |
Understand a post
The material behind a post you already have, for your own model to read.
| Tool | Cost | Inputs | What it does |
|---|---|---|---|
analyze_post_fast | 2 cr | url | The post's transcript, caption and stats — everything but the pictures. Two fetches: get_social_media and get_post_transcript. The default. A credit less than analyze_post, and it carries everything the script and structure depend on. |
analyze_post | 3 cr | url | Frames sampled across the video, as images your own model can look at, plus the transcript. Two fetches: get_post_frames (2) and get_post_transcript (1). The visuals are the point — framing, editing, on-screen text, pacing. |
understand_social_post | 3 cr | url, focus? | The same frames and transcript as analyze_post, asked for what physically happens on screen rather than why it works. You need the events, not the strategy. |
summarize_post_comments | 2 cr | url, limit? | The comment section, every comment with an id, and the taxonomy to label them with — sentiment, and whether each is praise, a complaint, a bug report, a question, a request, a comparison or spam. The goal is what to make next, not what people wrote. show_comment_review then draws your labels for free. |
compare_social_posts | 1 cr | urls[] (2–5) | The first post with its stats, and the comparison left to you — fetch the rest with get_social_media at 1 credit each. Performance differs and you need to know why. |
why_did_this_underperform | 3 cr | url | One post read against the creator's own recent median, so the answer can be “this is an ordinary result, not a failure”. You have one post and nothing to compare it with; compare_social_posts is for two URLs you already picked. |
show_post_analysis | Free | the analysis you wrote | Draws the analysis you wrote after analyze_post or analyze_post_fast handed you the material. Fetches nothing. After you have read the frames and the transcript — not instead of reading them. |
show_comment_review | Free | your labelled comments | Draws the comment classifications you produced from summarize_post_comments, each with its sentiment and category, sortable. After you have classified the comments. |
show_compared_posts | Free | your comparison | Draws the comparison you wrote, with a badge on the winner, what differed and the next experiment. After compare_social_posts and the fetches you made yourself. |
Research a niche or creator
Look across many posts to find the pattern.
| Tool | Cost | Inputs | What it does |
|---|---|---|---|
discover_social_posts | 2 cr | niche, platform?, limit?, offset? | Recent posts for a niche across seven networks, with pagination. You want posts to look at. Use niche_report for the pattern across them. |
get_user_posts | 2 cr | username, platform?, limit? | One creator's recent posts with stats. Scanning an account. |
search_creators | 2 cr | keyword, platform?, count? | Creators by niche or keyword, with follower and engagement data. You know the niche but not the names. |
get_similar_creators | 2 cr | username, platform? | Lookalikes for a creator that already fits. One creator works and you want more like them. |
suggest_creator_identity | 2 cr | handle, platform?, platforms? | Accounts on other networks that may be the same person, with the evidence for each. Suggests, never merges. 2 per network searched plus 2 for the handle. You have one confirmed handle and want the same creator elsewhere. |
discover_sounds | 2 cr | keyword, platform?, count? | Trending audio with playable previews and usage counts. Picking audio, or spotting a sound before it peaks. |
discover_hashtags | 2 cr | country?, days?, count?, industryId? | Trending hashtags with volumes and whether each is rising, cooling or steady. Choosing tags, or catching a wave early. |
find_hook_pattern | 2 cr | username, platform?, limit? | A creator's recent posts, fetched so their opening lines can be read as a set and turned into fill-in-the-blank templates. Reverse-engineering someone you want to learn from. The same single fetch as analyze_creator_profile, asked a narrower question. |
niche_report | 2 cr | niche, platform?, count? | Recent posts in the niche with their stats, so the dominant formats, the hook patterns and the gaps can be read off them. Entering a niche, or deciding what to make next. |
analyze_creator_profile | 2 cr | username, platform?, limit?, focus? | A creator's recent posts with their stats — the material of a teardown: niche, themes, hook formula, what over- and underperforms. A deep read of one account. Pair it with analyze_post on the posts whose visuals you want to see. |
search_mentions | 2 cr | term, platforms?, since?, limit?, offset? | Brand monitoring: every comment that names a term, across nine networks at once, grouped under the post it was left on and filtered to a date window you choose — 2 credits per network searched (5 for Xiaohongshu), not per call. Watching what is said about a brand, product or person; discover_social_posts is for one platform. |
watch_creator | Free | username, platform?, note? | Add a creator to your watchlist. Stores the handle only — nothing is fetched. You want to follow someone over time rather than look once. |
unwatch_creator | Free | username, platform? | Drop a creator from the watchlist. They should no longer appear in the catch-up. |
list_watchlist | Free | — | Who you are watching, and when you last caught up on each. Reads the stored list only. Before paying for a catch-up, or to find the exact handle to unwatch. |
catch_up_watchlist | 2 cr | limit?, platform? | What everyone you watch has posted since your last catch-up — 2 credits per creator checked, not per call. Following a set of creators over time instead of re-reading each one. |
detect_spoken_mentions | 2 cr | url, brands?, language? | Every brand named out loud in one video, for your model to find in the transcript beside the caption — 1 credit for the transcript and 1 for the caption, nothing when no transcript can be made. A brand may be said on camera but never written; you have the video's URL. |
search_spoken_mentions | 2 cr | term, platforms?, handles?, maxTranscripts? | Finds a term said out loud on camera rather than written anywhere — 2 credits per platform searched, 2 per creator handle checked and 1 per transcript actually fetched. A term might be spoken but never typed; search_mentions reads written text only. |
find_people_with_problem | 2 cr | problem, platforms?, shapes? | People describing a problem in their own words — 2 credits per search, and each platform is searched once per query shape, three by default, so 6 per platform. Demand research: who has the pain, in what words. Not searchable here: LinkedIn. |
answer_my_audience | 2 cr | username, platform?, limit? | Your own recent posts and the comments under them, so you can write the replies — 2 credits for the post list plus 2 per post opened, 14 at the default of 6. The job is answering your own audience rather than reading about strangers. |
show_audience_replies | Free | your drafted replies | Draws the replies you drafted, grouped under the post each comment was left on. Sends nothing. After drafting, not instead of drafting. |
track_creator | 2 cr | username, platform?, window? | One rival's recent posts scored against their own median, marking what is new since your last check. A rival you follow over time. Flat price, whatever the window size. |
compare_creators | 2 cr | usernames[] (2–5), platform? | Several creators on one window, each against their own median — one post list per creator, so 2 credits each and 4–10 in total. “Is their hit rate better than mine”; track_creator is one creator alone. |
watchlist_standings | 2 cr | limit?, platform? | How everyone on your watchlist is doing against their own median — 2 credits per creator, so the price is the size of your list. It confirms before spending. The weekly “who is accelerating”; catch_up_watchlist is what is new rather than how it did. |
show_standings | Free | your standings | Draws the standings you read out of compare_creators or watchlist_standings — one row per creator, their median, how often they beat it and by how much. After you have read the numbers. |
who_should_i_work_with | 2 cr | niche, platform?, seed? | A shortlist of creators worth approaching, with what to check before you do. 4 credits with a seed creator. Building a list to vet. It says what a full vet would cost rather than faking one. |
show_collab_shortlist | Free | your scored creators | Draws the creators you scored after vetting, ranked, with the scores attributed to you rather than to nooticr. After who_should_i_work_with and your own vetting. |
what_should_i_make_next | 2 cr | niche, platform?, limit? | The supply side and the demand side together — 2 credits for the post list, 2 per post read and 2 for the sweep, 12 at the default of 4. Deciding what to film; niche_report covers the supply half alone. |
create_brand_watch | Free | term or handle, kind?, cadence?, budgetCredits?, deliverTo? | Schedules a recurring sweep and emails only what is new. Free to create; each run bills like the tool it repeats — 2 credits per network (5 for Xiaohongshu), or a flat 2 for a competitor watch. You want the answer to keep arriving. It quotes the cost and asks before creating anything. |
list_brand_watches | Free | — | Every watch you have: cadence, cost per run, credits spent, runs made, next run due, and whether it is stopped. Before creating one — a second watch on the same term is a second recurring charge for the same answer. |
stop_brand_watch | Free | id | Stops a watch immediately: the run that was due does not happen and nothing further is charged. Works at a zero balance, because someone out of credits is exactly who needs to turn off what is spending them. |
update_watch_portfolio | Free | watchId, add, remove | Adds terms to a portfolio watch or takes them out. The per-run budget you agreed to does not move, so no new confirmation is needed. When a new competitor or product should join the comparison — the reply says if the split budget now reaches fewer networks. |
mention_trend | Free | watchId | The series a brand watch has built up over its runs, per network, with the mentions more than one run has seen. Free — the sweeps were billed when they ran. Reading direction out of a watch you already pay for. |
show_trend | Free | your read of the series | Draws the trend as a chart with your own read of what changed. Says so when the series is too short to call. After mention_trend. |
prepare_handoff | Free | the items you classified | Turns a bug report in a comment into the exact text to file in GitHub, Jira or Linear, with the quote framed as third-party evidence and a search string to check for duplicates first. You classified something worth filing. Fetches nothing and costs nothing. |
Research a marketplace
Read a category on twelve shopping sites: products, prices, star histograms and the review text itself.
| Tool | Cost | Inputs | What it does |
|---|---|---|---|
scan_marketplace_category | 3 cr | marketplace, query? or items[], limit?, reviews?, market? | A whole category from one of twelve marketplaces: products, prices, star histograms and the review text, with the arithmetic over them. 3 credits per product collected — a product with reviews is a real browser render behind the site's bot defences. Sizing up a category or a competitive set. Collection runs in the background; poll marketplace_scan_status for free. |
marketplace_scan_status | Free | marketplace, scanId, waitSeconds? | Picks up a scan that was still running. Free: it is the poll the scan asked for, and repeating it is how a scan gets more time. A scan came back incomplete — which the first call usually does. |
get_marketplace_product | 3 cr | marketplace, item, market? | One product by id or URL: price, rating, the full star histogram, specs and the review text. A single product; scan_marketplace_category collects many in one job. |
scan_amazon_category | 3 cr | query? or asins[], limit?, reviews?, domain? | The same as scan_marketplace_category for Amazon, plus Amazon's own review-aspect counts. 3 credits per listing collected. Amazon specifically. Any other site goes through scan_marketplace_category. |
amazon_scan_status | Free | scanId, waitSeconds? | Picks up an Amazon scan that was still running. Free, and repeatable. The Amazon half of marketplace_scan_status. |
get_amazon_product | 3 cr | asin or url, domain? | One Amazon listing: price, rating, star histogram, features, specs, Amazon's review digest and aspect breakdown, and the review text. A single listing. |
show_amazon_category_insights | Free | your category read | Draws the read you wrote beside the listings and their reviews, so a person can click a product and check any claim against the text it came from. After you have read the reviews. The scores shown are attributed to you, not presented as a nooticr rating of anyone's product. |
show_marketplace_category_insights | Free | marketplace, your category read | The same card for the other eleven sites: your read beside that site's listings and reviews, re-read from the scan so nothing is re-typed. After reading a scan_marketplace_category result. |
Make something
Turn what you learned into work you can publish.
| Tool | Cost | Inputs | What it does |
|---|---|---|---|
generate_hook_ideas | 2 cr | url? or topic, count?, tone? | The source post and its transcript, to write openings against. With a topic and no url it fetches nothing and costs nothing. You know the subject and need openings to choose between. |
evaluate_social_draft | Free | draft, platform? | Your draft back with the rubric to hold it to — hook, clarity, payoff, specificity and fit, each scored 1-10, plus the fixes worth making. Free: the text is already yours, so there is nothing to fetch. Before filming, while changing it is still cheap. The only tool that runs before the content exists. |
adapt_post_for_platform | 2 cr | url, targets? | The source post and its transcript, to rewrite as an X thread, LinkedIn post, carousel, YouTube metadata or newsletter. A post worked and you want it on other surfaces. |
generate_post_variants | 2 cr | url, count?, angle? | The post that worked, with its transcript, to build variants from — hook, the angle that changes, ordered shot beats, CTA. Moving from why it worked to what to make. |
show_hooks | Free | the hooks you wrote | Draws the openings you wrote, each with the device it uses and who it stops. After generate_hook_ideas. |
show_variants | Free | the variants you wrote | Draws each variant's hook, the angle that changes, its shot beats and its call to action. After generate_post_variants. |
show_repurposed_post | Free | the copy you wrote | Draws the rewritten copy, one entry per surface you rewrote it for. After adapt_post_for_platform. |
review_post | Free | postId, or appId plus draft fields | Scores a post before you publish: hook strength, an optional A-vs-B hook comparison, aesthetic and storytelling notes, rewritten hook and caption suggestions. Nothing is published. The last check before it goes out. Free, same as the dashboard's own pre-publish review. |
draft_post | Plan AI credits | topic, appId?, platform? | A full draft for your own product — hook, caption, hashtags and a per-slide script. Saves and schedules nothing. Billed like the dashboard's Draft Post button: your workspace's plan AI credits, not your MCP balance. |
generate_captions | Plan AI credits | videoId or appId | A transcript plus start/end-timed caption lines for your own video. Burns nothing onto the video. Billed like the dashboard's Generate Captions button: plan AI credits. |
generate_content_plan | Plan AI credits | appId? | A weekly plan grounded in your own post history. Saves it; schedules and publishes nothing. Billed like the dashboard's Content Plan button: plan AI credits. Read it back later with get_content_plan. |
get_content_plan | Free | appId? | The saved weekly plan, or null when none has been generated yet. Read-only. Reading back what generate_content_plan produced. Free even when a plan exists. |
growth_brief | Plan AI credits | appId? | What is working, what is not, the wins, the risks and concrete next actions — grounded in your real post history and synced analytics. Read-only. Billed like the dashboard's Growth Brief button: plan AI credits. |
Your own product
Your own workspace: its products, its pipeline, its connected accounts and its performance.
| Tool | Cost | Inputs | What it does |
|---|---|---|---|
list_own_apps | Free | — | Every product in your own workspace — id, name, niche, product type. Reads only your own workspace. First, when your workspace has more than one product and another tool here asks for an appId. |
create_product | Free | name, niche?, product_type?, website_url? | Creates a product in the session's own workspace — the row every other tool here needs. Free: no AI call, just a row. A fresh workspace has none. It cannot create in a workspace you could name. |
update_product | Free | appId?, plus the fields to change | Patches your product's fields; omitted arguments leave their column unchanged, and the result lists what was actually written. A misspelled field shows up as one that did not change rather than as a silent no-op. |
analyze_product | Plan AI credits | appId? | Fetches your product's own website, reads its recent posts and performance, and writes the result as the product's brand playbook. 10 of your workspace's plan AI credits, first analysis free per workspace. Runs as a job — poll analyze_product_status. |
analyze_product_status | Free | jobId | Polls an analyze_product job: pending, thinking, done or error, and the playbook once it is done. Free to poll — the cost was charged when the job started. |
get_brand_playbook | Free | appId? | The product's brand playbook, if one has been configured in the dashboard or written by analyze_product. Returns available: false when none exists. Grounding anything you write in what the brand has already decided. |
get_scheduled_posts | Free | appId?, status? | What is queued to publish — title, status, scheduled time, approval status. Publishes and changes nothing. The pipeline, not the history; get_post_performance is what already went out. |
get_post_performance | Free | appId?, limit? | Your own published posts with their engagement counters — views, likes, comments, shares, platform, date. The raw history. Pair it with growth_brief for an interpretation. |
get_video_stats | Free | appId? | Your most recently synced video stats across every connected creator, plus a running total. Reads the last sync; triggers no new one. A quick total without spending anything. |
get_google_analytics_data | Free | appId? | Your GA4 sync as of its last sync: property, date range, rows synced. Checking your GA4 data is flowing into nooticr. |
get_search_console_data | Free | appId? | Search Console clicks, impressions and top queries as of the last sync. Whether people search for what your content is about. |
get_posthog_analytics | Free | appId? | Your PostHog pageview trend as of the last sync. Lining a post's date up against traffic to your site. |
list_social_connections | Free | — | Which social accounts your workspace has connected and what each one is allowed to do — read, publish, manage comments — plus which platforms can be connected at all. Before anything that needs an account linked. |
connect_social_account | Free | platform | A link to open so the user can connect one account. They approve at the provider; no credential passes through this tool. list_social_connections showed the platform is connectable and not yet connected. |
Account
Balance and billing. Never billed.
| Tool | Cost | Inputs | What it does |
|---|---|---|---|
nooticr_getting_started | Free | — | Where this account stands (balance, connections, watchlist) and the next calls worth making, with prices. The first call, or whenever you are not sure what to try. |
check_nooticr_credits | Free | — | Balance and billing URL. Before a run of paid calls. |
list_tool_runs | Free | tool?, from?, to?, success?, minCredits?, limit?, before?, scope? | Your tool-call history: what ran, whether it worked, and the credits each call actually took. A balance moved more than expected. |
get_tool_run | Free | id | One run by id, with its full error. Looking closely at one charge from list_tool_runs. |
get_usage_report | Free | days?, from?, to?, scope? | Spend over a window: totals, per tool, per day, recent failures; per seat for a workspace's owners and admins. What did we spend this month, on what, and what failed. |
nooticr_login | Free | — | Re-link the account. A call fails with an authentication error. |
nooticr_settings_read | Free | — | Read your default social platform and result count. Check the research defaults used when you omit those arguments. |
nooticr_settings_update | Free | set | Save your default social platform and result count for research tools. Choose the defaults for future calls that omit those arguments. |
Billing
Usage is prepaid in credits. New accounts start with 20 free credits. Every tool is priced at what it fetches upstream, so a tool that makes two fetches costs both — the table above says which.
| Pack | Price | Credits | Per credit |
|---|---|---|---|
| Starter | $15 | 600 | $0.025 |
| Pro | $40 | 2,000 | $0.020 |
| Scale | $85 | 5,000 | $0.017 |
- Credits do not expire and there is no subscription or recurring charge.
- A call that fails is refunded automatically.
- A call interrupted after it was charged — a deploy, a dropped connection, a timeout — is billed once at most. Retries carry an idempotency key.
- Payment is handled by Stripe. Nooticr never sees or stores card details.
Check the balance any time with check_nooticr_credits. Top up on the dashboard — the MCP surface deliberately offers no purchase of any kind, so nothing in a conversation can sell you credits.
Errors and limits
| You see | Meaning | Do |
|---|---|---|
401 Unauthorized | No valid token | Reconnect the connector, or run nooticr_login |
-32002 insufficient credits | Balance too low for this tool | Top up on the nooticr website, then call the tool again |
available: false | The post has no caption track | Not an error — use analyze_post instead |
| Unsupported URL | Not one of the 10 supported networks | Check the coverage list above |
A 401 carries a WWW-Authenticate header pointing at the protected-resource metadata, so a compliant client can discover the authorization flow without configuration.
Long-running tools stream their result over SSE and can take 20–70 seconds. If the connection drops, the client reconnects with Last-Event-ID and receives what it missed rather than restarting the call.
Support
Email support@nooticr.com for questions, security reports, data requests or account deletion. We respond to privacy requests within 30 days.
- Service status: /health
- OAuth metadata: /.well-known/oauth-authorization-server
- Source: github.com/Nooticr/nooticr-mcp
- Package: @nooticr/mcp