# ViewPrinter (remote · viewprinter.tech)

Schedule social posts to TikTok, Instagram, Facebook, YouTube and X; manage accounts and media

- Trust score: 80/100 (high trust)
- Change this week: +43
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-20

## Components

- remote · `viewprinter.tech`: 80/100 (this document), [markdown](https://verifymcp.io/servers/tech-viewprinter-viewprinter/api-mcp.md), [page](https://verifymcp.io/servers/tech-viewprinter-viewprinter/api-mcp)

## Channel facts

- Endpoint: `https://viewprinter.tech/api/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-20.

- **Endpoint Security**: 92/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server supports Client ID Metadata Documents, the current MCP client-registration mechanism.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 76/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2333 tokens (~129/item across 18 items; 18 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 13/100
  - Stability observed for 4 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 97/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 89% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 19 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the ViewPrinter MCP server?

ViewPrinter is a hosted endpoint at https://viewprinter.tech/api/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http tech-viewprinter-viewprinter 'https://viewprinter.tech/api/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "tech-viewprinter-viewprinter": {
      "url": "https://viewprinter.tech/api/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "tech-viewprinter-viewprinter": {
      "type": "http",
      "url": "https://viewprinter.tech/api/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.tech-viewprinter-viewprinter]
url = "https://viewprinter.tech/api/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "tech-viewprinter-viewprinter": {
      "type": "remote",
      "url": "https://viewprinter.tech/api/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add tech-viewprinter-viewprinter --url 'https://viewprinter.tech/api/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  tech-viewprinter-viewprinter:
    url: "https://viewprinter.tech/api/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "tech-viewprinter-viewprinter": {
      "Transport": "http",
      "Url": "https://viewprinter.tech/api/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add tech-viewprinter-viewprinter -t streamable-http -u 'https://viewprinter.tech/api/mcp'
```

### Other

```json
{
  "mcpServers": {
    "tech-viewprinter-viewprinter": {
      "type": "http",
      "url": "https://viewprinter.tech/api/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-09-19 (score 80, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-17 (score 79, 0)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] Tool “posts_update” rewrote its description, which is the text the model reads
- [functional improvement] Stability: unverified → 0.03
- [functional] Server version: 0.1.0 → 1.0.0

### 2026-09-16 (score 79, +42)

- [security improvement] Transport: unverified → pass
- [security improvement] Injection markers: unverified → pass
- [security] First check of Judged manipulation: pass
- [security] Authorization: Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Tool coverage: unverified → 100
- [functional] First check of Schema quality: fail
- [functional] First check of Tool coverage: 89
- [functional] First check of Schema quality: excellent
- [functional] First check of Schema quality: fail
- [functional] First check of Destructive annotations: 100
- [functional] First check of Tool coverage: 100

### 2026-09-01 (score 37)

First indexed and scored.

## MCP tools (18)

### `platforms_list` (~135 tokens)

List platform rules

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 rejected.

Input parameters:

- `platforms` (array): 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 th…

Output parameters:

- `platforms` (array)

### `accounts_list` (~58 tokens)

List connected accounts

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.

Output parameters:

- `accounts` (array)

### `accounts_performance` (~123 tokens)

Read account performance

How each connected account is performing: followers, posts, total likes and following, each with how far it has moved over the period. Ordered by followers, largest first. Numbers are as of the last sweep rather than live — every account carries the time it was measured, and an account nobody has measured yet has no metrics at all rather than zeroes.

Input parameters:

- `period` (string): 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.

Output parameters:

- `accounts` (array)

### `posts_performance` (~225 tokens)

Read post performance

How published posts are performing, one row per destination: views, likes, comments, shares and saves, each with how far it has moved over the period. Best first, so the default answers "what did well" in one call rather than by listing everything. Sort by change instead to find what is moving now. Numbers are as of the last sweep, and every row carries the time it was measured — a delivery nobody has measured yet has no metrics at all rather than zeroes, and sorts last.

Input parameters:

- `by` (string): Rank by the running total, or by how much it moved over the period. Defaults to the total. A post with no observation in the window has no change and sorts last either way.
- `limit` (integer): How many to return. Defaults to 10. Ask for more only when you need them — every row carries its post and account.
- `period` (string): The window a change is measured over. Defaults to 24h.
- `sort_by` (string): Which counter to rank by. Defaults to views.

Output parameters:

- `posts` (array)

### `accounts_connect` (~68 tokens)

Connect a social account

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.

Input parameters:

- `platform` (string, required): Which platform to connect.

Output parameters:

- `connected` (array)
- `platform` (string)
- `status` (string)
- `url` (string)

### `groups_list` (~68 tokens)

List account groups

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_schedule instead of listing account ids.

Output parameters:

- `groups` (array)

### `groups_create` (~113 tokens)

Create an account group

Name a set of accounts. Afterwards posts_schedule can take the name instead of every id. The name is how it is addressed, so it has to be unique in the workspace and is matched without regard to case. All the accounts must be in one workspace.

Input parameters:

- `account_ids` (array, required): The accounts to put in it, from accounts_list.
- `description` (string): What it is for, so it can be chosen without reading it.
- `name` (string, required): What to call it. Unique per workspace.

Output parameters:

- `group` (object)

### `groups_update` (~108 tokens)

Change an account group

Rename a group, re-describe it, or change who is in it. account_ids is the full membership afterwards, not a list to add: whatever is sent replaces what was there. Omit it to leave the members alone.

Input parameters:

- `account_ids` (array): Replaces the membership entirely. Omit to leave it.
- `description` (string)
- `name` (string, required): The group to change, from groups_list.
- `new_name` (string): Rename it to this.

Output parameters:

- `group` (object)

### `groups_delete` (~65 tokens)

Delete an account group

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.

Input parameters:

- `name` (string, required): The group to remove, from groups_list.

Output parameters:

- `deleted` (string)

### `media_upload` (~87 tokens)

Start a media upload

Reserve an id and get a short-lived URL to PUT the file to. The bytes go straight to storage, not through this API. Call media_confirm with the same id once the PUT succeeds — nothing is recorded until then.

Input parameters:

- `kind` (string, required): What the file is.
- `mime_type` (string, required): The exact Content-Type the PUT will send, e.g. video/mp4.

Output parameters:

- `expires_in_seconds` (number)
- `id` (string)
- `url` (string)

### `media_confirm` (~102 tokens)

Confirm a media upload

Record a file that finished uploading. Its size and type are read back from storage rather than taken on trust. Safe to call again if the first response was lost.

Input parameters:

- `description` (string): What the file shows, if you already know. Kept as the file is recorded; use media_update to change it later. Confirming again never overwrites one already written.
- `id` (string, required): The id media_upload returned.
- `kind` (string, required)

Output parameters:

- `media` (object)

### `media_list` (~29 tokens)

List uploaded media

Every file uploaded in your workspaces, newest first. Use these ids when attaching media to a post.

Output parameters:

- `media` (array)

### `media_update` (~114 tokens)

Describe a file

Say what a file shows, in your own words. On a base image this is 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. Send null to clear it. Nothing else about a file can be changed here; what it is was read from the file itself.

Input parameters:

- `description` (required): The words, or null to remove the ones already there.
- `id` (string, required)

Output parameters:

- `media` (object)

### `media_delete` (~38 tokens)

Delete a file

Remove a file and its stored bytes. This cannot be undone, and any post still using it will lose it.

Input parameters:

- `id` (string, required)

Output parameters:

- `deleted` (boolean)

### `posts_schedule` (~420 tokens)

Schedule a post

Create a post and queue it for every account named. Pass draft true to hold it here instead, sending nothing until posts_update promotes it. Name accounts with ids from accounts_list, or name a group from groups_list and get all of its members — the two combine, and a group is expanded now, so adding an account to it later does not add it to this post. Accounts must all be in one workspace. Attach media by id from media_list; a post is either a video or a set of images, never both. Omit scheduled_at to send as soon as possible. Nothing publishes yet: this records the intent. Publishing has to be enabled on the account; where it is not, this saves nothing at all and says so. Do not tell anyone their post is saved or scheduled until this has returned successfully.

Input parameters:

- `account_ids` (array): Which accounts to post to, from accounts_list. Optional when groups is given; naming neither is refused.
- `content` (string): The caption.
- `draft` (boolean): Hold the post here instead of sending it. Nothing is queued and nothing reaches any platform; use posts_update with draft false to send it. Unrelated to the per-platform draft option, which uploads t…
- `groups` (array): Group names from groups_list, expanded to their members and combined with account_ids. Matched without regard to case.
- `idempotency_key` (string): Reuse on retry to avoid posting twice; returns the original post.
- `media_ids` (array): Files to attach, in order. Order is the slideshow order.
- `platform_options` (object): Per-platform settings, keyed by platform. Only the keys shown are accepted — an unknown key is refused rather than ignored. The names, types and accepted values are here; call platforms_list for what…
- `scheduled_at` (string): ISO 8601. Omit to send as soon as possible.

Output parameters:

- `post` (object)

### `posts_update` (~378 tokens)

Change a post

Change a post that has not gone out yet: its caption, its time, its destinations, or whether it is a draft. Editing is always allowed; sending a draft needs publishing enabled on the account, and where it is not the draft is left exactly as it was. This is what sends a draft — pass draft false, and it is queued using scheduled_at (or immediately if that is empty). Destinations can be named as account ids, group names from groups_list, or both — a group is expanded now, so it is a shorthand for its members rather than a live link to it. Changing the time re-aims delivery, so there is no separate publish step. This is also how a failed destination is sent again: set scheduled_at, and every destination that failed is queued again while the ones that already published are left alone — fix what made them fail first, usually by reconnecting the account. The caption and the destinations can only be changed while nothing has published yet; after that the time is still editable, and changing the words means a new post.

Input parameters:

- `account_ids` (array): Replaces the destination list entirely — send every account you want, not just the new ones. All must be in the post's workspace.
- `content` (string): Replaces the caption.
- `draft` (boolean): False promotes a draft and sends it. True returns a scheduled post to draft, cancelling its delivery.
- `groups` (array): Group names, expanded to their members and combined with account_ids. Together they replace the destination list, so naming only a group drops any account outside it.
- `post_id` (string, required): The post to change, from posts_list.
- `scheduled_at` (string): ISO 8601. Replaces the time. A time in the past sends as soon as possible.

Output parameters:

- `post` (object)

### `posts_list` (~57 tokens)

List posts

Posts in your workspaces, newest first, each with the state of every destination it was sent to. Call it to check whether something published, and before changing or cancelling anything — posts_update and posts_cancel both take a post_id from here.

Output parameters:

- `posts` (array)

### `posts_cancel` (~56 tokens)

Cancel a post

Stop a post before it goes out. Destinations that have not started are cancelled; any already being published cannot be recalled and are returned in still_going. Safe to call again.

Input parameters:

- `post_id` (string, required): From posts_list.

Output parameters:

- `cancelled` (number): How many destinations were stopped before they started.
- `post_id` (string)
- `still_going` (array): Destinations already in flight, which cannot be stopped.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/tech-viewprinter-viewprinter/api-mcp#diagnostics

## Score history

- 2026-09-20: 80
- 2026-09-19: 80
- 2026-09-18: 79
- 2026-09-17: 79
- 2026-09-16: 79
- 2026-09-15: 37
- 2026-09-14: 37
- 2026-09-13: 37
- 2026-09-12: 37
- 2026-09-11: 37
- 2026-09-10: 37
- 2026-09-09: 37
- 2026-09-08: 37
- 2026-09-07: 37
- 2026-09-06: 37
- 2026-09-05: 37
- 2026-09-04: 37
- 2026-09-03: 37
- 2026-09-02: 37
- 2026-09-01: 37

## Common questions

### What is the ViewPrinter MCP server?

ViewPrinter is an MCP server listed in the public MCP registry as tech.viewprinter/viewprinter. Schedule social posts to TikTok, Instagram, Facebook, YouTube and X; manage accounts and media. This page covers its hosted endpoint (https://viewprinter.tech/api/mcp).

### Is the ViewPrinter MCP server safe to use?

ViewPrinter scores 80 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the ViewPrinter MCP server expose?

ViewPrinter exposes 18 tools: platforms_list, accounts_list, accounts_performance, posts_performance, accounts_connect, and 13 more. Their descriptions and schemas cost roughly 2,244 tokens of context every time the server is loaded.

### Does the ViewPrinter MCP server require authentication?

Yes. ViewPrinter asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

### Is the ViewPrinter MCP server still maintained?

ViewPrinter is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://viewprinter.tech/api/mcp
- Website: https://viewprinter.tech/
- Changelog RSS feed: https://verifymcp.io/servers/tech-viewprinter-viewprinter/api-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/tech-viewprinter-viewprinter/api-mcp.json
- HTML version of this page: https://verifymcp.io/servers/tech-viewprinter-viewprinter/api-mcp
