Google Search Console integration for Model Context Protocol (MCP)
ViewPrinter is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Schedule social posts to TikTok, Instagram, Facebook, YouTube and X; manage accounts and media
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http viewprinter-mcp https://viewprinter.tech/api/mcp
# 2 — ask your agent for something these tools do
# platforms_list, accounts_list, accounts_connect and 13 more
ViewPrinter costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http viewprinter-mcp https://viewprinter.tech/api/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
16 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
What each platform accepts. Called with nothing, it lists every platform with the media kinds and counts it takes and its caption limit — enough to decide where a post can go. Name platforms to add their recommended sizes and durations, their options with what each one does, and the quirks that decide how a post is treated. Read this before scheduling rather than discovering the rules by being rej
| Parameter | Type | Required | Notes |
|---|---|---|---|
| platforms | array | no | Which platforms to describe in full. Omit for a short answer covering all of them. Naming only the platforms you are posting to keeps the reply small — full detail for all of them is several times the |
List every social account you can post to, across all your workspaces. Each account includes the workspace it belongs to and any groups it is in. Use the returned ids to name post destinations explicitly, or a group name to name several at once. metrics true adds how each account is performing — followers, posts, total likes and following, each with how far it moved over the period — and orders b
| Parameter | Type | Required | Notes |
|---|---|---|---|
| metrics | boolean | no | Include followers and how they moved. Defaults to false. |
| period | string | no | With metrics: the window every change is measured over. Defaults to 24h. A change is the difference against the last observation before the window opened, so it is null when there was none. |
Connect a social account. Opens the platform in the person's browser so they can sign in and approve access — that part cannot happen here, because it needs their session and their consent. Call it again after they finish and it reports the connected account. With invite, the link is for someone else instead — a friend or family member who will create a brand-new account and connect it, with no
| Parameter | Type | Required | Notes |
|---|---|---|---|
| platform | string | yes | Which platform to connect. |
| invite | object | no | Set to make a link for someone without a login here, who will create the account. Leave out to connect an account yourself. |
The products your accounts post for — an app, a book, a shop — each with the accounts linked to it and the workspace it is in. An account belongs to at most one product. Use products_save to create one or change which accounts belong to it.
No parameter schema on file.
Create a product, or change one. Found by id when given, otherwise by name (ignoring case) and created when there is none, so saving the same product twice changes nothing the second time. account_ids is the complete list of accounts that post for it: accounts in another product move here, and accounts in this one that are not listed leave it. Leave it out to keep the accounts as they are. A prod
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | no | An existing product to change, from products_list. |
| name | string | yes | The name, or the new name when id is given. |
| description | string | no | What it is, in a sentence or two. |
| account_ids | array | no | Every account that posts for it, from accounts_list. |
| workspace_id | string | no | — |
Delete a product. Its accounts stay connected and belong to no product afterwards. Refused while it has campaigns. Its knowledge documents and gathered research are deleted with it, so this is refused while it has any unless confirm_discard is true — read the refusal, which says how many would go, before confirming.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | The product, from products_list. |
| confirm_discard | boolean | no | — |
Your named sets of accounts. Each group lists its members with the state of each, and how many of them need reconnecting — a post naming a group is refused outright if any member cannot publish, so check here before composing one. Use a group name with posts_save instead of listing account ids.
No parameter schema on file.
Create a group or change one. A group is a name for a set of accounts, so posts_save can take the name instead of every id. Found by name without regard to case: an existing group is updated (new_name renames it), and a new name creates one, which needs account_ids. account_ids is always the full membership afterwards, not a list to add. All the accounts must be in one workspace.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | The group, matched without regard to case. Created when there is none by this name. |
| new_name | string | no | Rename an existing group to this. |
| description | string | no | What it is for, so it can be chosen without reading it. |
| account_ids | array | no | The complete membership, from accounts_list — whatever is sent replaces what was there. Required to create a group; omit it to leave an existing group’s members alone. |
Remove a group. The accounts in it are not touched and stay connected — only the name and its membership go. Posts already scheduled through it are unaffected, because a post records the accounts rather than the group.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | The group to remove, from groups_list. |
Get a file into ViewPrinter, under an id you can pass to posts_save, media_save or anything else that takes a media id. If the person attached the file in this chat, or has it on their phone or computer, call this with no arguments, as an ordinary tool call — not from code, and without trying to send the file yourself. Apps that show widgets put an upload box under the call, which sends the file
| Parameter | Type | Required | Notes |
|---|---|---|---|
| kind | string | no | What the file is. With mime_type when you hold the file. With from_url it is optional, and checked against what the link serves. |
| mime_type | string | no | The exact Content-Type your PUT will send, e.g. video/mp4. Only with kind, when you hold the file. |
| purpose | string | no | library, the default: a file to post. source: raw material kept to find and reuse — a generated take, a recording, a sound effect, a saved meme. A source file is listed only when asked for, and is nev |
| sha256 | string | no | When you hold the file: its SHA-256, as hex. If this workspace already has the file, the answer is its id with existing: true and nothing to upload. Otherwise the PUT must carry the headers the answer |
| from_url | string | no | A file already on the web — a model’s output link, a meme’s direct link. ViewPrinter fetches it itself; there is nothing to PUT. |
| description | string | no | With from_url: what the file shows, in your own words. |
| tags | array | no | With from_url: labels to filter by, e.g. sound-effect. |
| metadata | object | no | With from_url: how it was made — model, prompt, cost and so on. |
| items | array | no | Several files at once, each as you would pass one. The answers come back in items, in the same order. |
Files in your workspaces, newest first, 50 at a time. Use these ids when attaching media to a post. By default these are the files to post; purpose: source lists the raw material kept to reuse instead. Narrow with kind, tags (files carrying every one) or search (words in the description or tags), or pass media_id for one file of either purpose. Each file has a url to download it from. When nextCur
| Parameter | Type | Required | Notes |
|---|---|---|---|
| media_id | string | no | One file by id. Every other argument is ignored. |
| kind | string | no | Only this kind of file. |
| purpose | string | no | library, the default: files to post. source: raw material kept to reuse — generated takes, recordings, sound effects, saved memes. |
| tags | array | no | Only files carrying every one of these tags. |
| search | string | no | Words in the description or the tags, ignoring case. |
| limit | integer | no | How many to return. Defaults to 50. |
| cursor | string | no | nextCursor from the previous page, for the page after it. |
Say what a file is, in your own words. description is what it shows: on a base image, who is on camera — "a woman in her early twenties, blonde hair in a loose bun" — and a campaign reads it so the same person appears in every render instead of changing between them. tags are labels to filter by, like sound-effect; metadata is how it was made — provider, model, prompt, jobId, costUsd, sourceUrl, r
| Parameter | Type | Required | Notes |
|---|---|---|---|
| description | no | What the file shows, in your own words, or null to remove the words already there. | |
| tags | array | no | Labels to filter by, replacing those there. [] removes them all. |
| metadata | no | How it was made, replacing what is there, or null to remove it. | |
| purpose | string | no | library, the default: a file to post. source: raw material kept to find and reuse — a generated take, a recording, a sound effect, a saved meme. A source file is listed only when asked for, and is nev |
| id | string | no | The file to change. For several, use items instead. |
| items | array | no | Several files at once, each an id and what to change. Only files that have arrived are changed; the rest come back in not_found. |
Remove a file and its stored bytes. This cannot be undone. A file a post still uses cannot be removed, and neither can raw material kept with purpose source: switch it to library with media_save first.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | — |
Ask a question about your niche and get back the posts that answer it. Give question and product_id and it starts searching for that question, which takes a few minutes, and returns at once with a thread_id and status working. Call it again with just the thread_id, about every 15 seconds, until status is ready; then posts are the answer, best first. Each has its URL, caption, hashtags, views, like
| Parameter | Type | Required | Notes |
|---|---|---|---|
| question | string | no | What you want to know, in plain words, as you would ask a researcher. Starts a new search for it. Needs product_id. |
| thread_id | string | no | A thread from an earlier call. Alone, it returns where that question is, or its answer once ready. With a question, it asks a follow-up on the same thread once the last one is done. |
| product_id | string | no | The product this is for, from products_list. Required with a question. Without one, narrows the index read to this product. |
| since | string | no | Posted on or after this ISO 8601 time. Default: 7 days ago for an index read, 30 days for a question’s answer. |
| medium | string | no | Only videos, or only slideshows. |
| include_ads | boolean | no | Include posts TikTok marks as paid promotion. Default false. |
| language | string | no | Only this language, as a two-letter code such as en. Posts whose language TikTok could not tell are kept. |
| fit | string | no | How closely a post must fit your product. relevant (default) drops posts judged off-topic and keeps ones not judged yet; in_niche keeps only judged in-niche posts; all keeps everything. |
| limit | integer | no | How many posts. Default 10. |
Create, change or cancel a post. This publishes: a new post is queued for every account named and goes out at scheduled_at, or as soon as possible without one. Do not tell anyone their post is saved or scheduled until this has returned successfully. No post_id creates a post. Name accounts with ids from accounts_list, or a group from groups_list for all of its members — the two combine, and a gro
| Parameter | Type | Required | Notes |
|---|---|---|---|
| post_id | string | no | A post to change or cancel, from posts_list. Omit to create one. |
| content | string | no | The caption. |
| account_ids | array | no | Accounts to post to, from accounts_list. On a new post, optional when groups is given; naming neither is refused. On an existing post, replaces the destinations — send every account you want. |
| groups | array | no | Group names from groups_list, expanded to their members and combined with account_ids. Matched without regard to case. |
| media_ids | array | no | New posts only. Files to attach, in order — the slideshow order. |
| scheduled_at | string | no | ISO 8601. Omit to send as soon as possible. A time in the past sends as soon as possible. |
| platform_options | object | no | New posts only. Per-platform settings, keyed by platform. Only the keys shown are accepted — an unknown key is refused rather than ignored. Call platforms_list for what each one does, its default, and |
| draft | boolean | no | True holds the post here: nothing is queued and nothing reaches any platform. On an existing post, false sends a draft and true returns a scheduled post to draft. Unrelated to the per-platform draft o |
| cancel | boolean | no | With post_id: stop the post before it goes out. |
| idempotency_key | string | no | New posts only. Reuse on retry to avoid posting twice; returns the original post. |
Posts in your workspaces, newest first, one page at a time, each with the state of every destination it was sent to and the numbers it has earned so far. Call it to find one post (post_id), to check whether something published, and before changing or cancelling anything — posts_save takes a post_id from here. Numbers are as of the last sweep, and every destination carries the time it was measured
| Parameter | Type | Required | Notes |
|---|---|---|---|
| post_id | string | no | One post by id. The other filters are ignored. |
| from | string | no | ISO date or date-time. Only posts that went out, or are due to, at or after this. |
| to | string | no | ISO date or date-time. Only posts before this. |
| status | array | no | published, scheduled, draft, failed or cancelled. A post matches when any of its destinations is in one of these states. |
| platform | array | no | — |
| account_id | array | no | Accounts by id, from accounts_list. |
| group | array | no | Groups by name, from groups_list: posts to any of their accounts. |
| product | array | no | Products by name or id: posts to accounts linked to them. |
| source | array | no | Where a post came from. external is one made on the platform itself and found afterwards. |
| search | string | no | Text the caption contains, ignoring case. |
| sort_by | string | no | A counter or insight (views, likes, …), "when", "updated" or "account". Defaults to newest first. |
| order | string | no | Defaults to desc. |
| period | string | no | The window each figure's change is measured over. Defaults to 24h. |
| limit | integer | no | Posts per page. Defaults to 25. |
| cursor | string | no | nextCursor from the previous page. |
| rank_by | string | no | Rank the matching posts by one figure of their best destination instead: any counter (views, likes, …) or insight (reach, avgWatchMs, completionRate, retentionAt3s, retentionAtHalf, …). Answers "which |
| by | string | no | With rank_by: the running total, or how much it moved over the period. Defaults to the total. Insights rank by value only. |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install ViewPrinter or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | moderate | capability blast radius (moderate) — client exposure if the model is manipulated | −3 |
| coverage-honesty | manifest | inspection depth (manifest) — how much of the target the scan could see | −4 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
The scan read each tool’s name, description, input schema and annotations exactly as the server listed them the last time it answered us; no code was reviewed. We ask the server again about once a month, and a list that changed is graded again.
The implementation source was not read — this reflects the declared tool metadata only.
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. moderate is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| platforms_list | no tags | |
| accounts_list | no tags | |
| accounts_connect | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| products_list | no tags | |
| products_save | state-write | state-write: declares readOnlyHint: false |
| products_delete | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| groups_list | no tags | |
| groups_save | state-write | state-write: declares readOnlyHint: false |
| groups_delete | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| media_upload | external-sink | external-sink: keyword "http_request", declares readOnlyHint: false, openWorldHint: true |
| media_list | untrusted-input | untrusted-input: keyword "download" |
| media_save | state-write | state-write: declares readOnlyHint: false |
| media_delete | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| research_ask | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| posts_save | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| posts_list | no tags |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 1.1.0.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish ViewPrinter can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.