Skip to main content
Glama
viralnote

viralnote-mcp

Official
by viralnote
README.md
# @viralnote/mcp-server

[![ViralNote MCP server](https://glama.ai/mcp/servers/viralnote/mcp-server/badges/card.svg)](https://glama.ai/mcp/servers/viralnote/mcp-server)

A [Model Context Protocol](https://modelcontextprotocol.io) server for the **ViralNote** social media API.

Plug it into Claude Desktop, Claude Code, Cursor, or any other MCP-aware host and your agent can schedule posts, manage media, and read analytics across X, Instagram, Facebook, TikTok, LinkedIn, YouTube, Pinterest, Bluesky, Threads, and Reddit — as native MCP tool calls. No glue code.

## Install

### Claude Desktop / Claude Code / Cursor

Add to your MCP config (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS, similar on other platforms):

```json
{
  "mcpServers": {
    "viralnote": {
      "command": "npx",
      "args": ["-y", "@viralnote/mcp-server"],
      "env": {
        "VIRALNOTE_API_KEY": "vnd_..."
      }
    }
  }
}
```

Restart your MCP host. The ViralNote tools will be available immediately.

This repo includes a root [`.mcp.json`](./.mcp.json) ([Open Plugins](https://open-plugins.com) standard) so tools like [Cursor Directory](https://cursor.directory/plugins/new) can auto-detect the MCP server from the GitHub URL.

#### Cursor Marketplace

Once the plugin is published on Cursor Marketplace, you can install it directly from Cursor:

1. Open Cursor and go to Settings → Plugins
2. Search for "ViralNote" in the Marketplace
3. Click Install
4. In Plugins → Configure, set your `VIRALNOTE_API_KEY`
5. Get your API key from [dashboard.viralnote.app](https://dashboard.viralnote.app) or [viralnote.app/developers/auth](https://viralnote.app/developers/auth)

The ViralNote tools will be immediately available in your Cursor environment.

### Local install

```bash
npm install -g @viralnote/mcp-server
```

Then reference `viralnote-mcp` directly in your MCP config:

```json
{
  "mcpServers": {
    "viralnote": {
      "command": "viralnote-mcp",
      "env": { "VIRALNOTE_API_KEY": "vnd_..." }
    }
  }
}
```

## Configuration

| Env var | Required | Default | Notes |
|---|---|---|---|
| `VIRALNOTE_API_KEY` | yes | — | Generate at [viralnote.app/developers/auth](https://viralnote.app/developers/auth). Grant `posts:read`, `posts:write`, plus `webhooks:*` if your agent should manage webhooks. |
| `VIRALNOTE_API_BASE` | no | `https://viralnote.app/api/v1` | Override for staging/self-hosted instances. |

## Tools exposed

| Tool | Purpose |
|---|---|
| `list_posts` | List posts (filter by status/platform, paginated) |
| `get_post` | Read one post including per-platform publish results |
| `create_post` | Create a draft (`is_draft: true`) or scheduled post |
| `update_post` | Update a draft or scheduled post |
| `delete_post` | Delete (cancels if scheduled) |
| `publish_post` | Publish a draft now |
| `list_media` | List media library items |
| `import_media` | Import by URL (200MB) or base64 data (3MB) |
| `delete_media` | Delete a media item |
| `list_social_accounts` | List connected social accounts |
| `list_analytics` | Published posts with per-platform metrics |
| `list_post_results` | Per-platform delivery results (success/error) |
| `list_webhooks` | List webhook subscriptions |
| `create_webhook` | Subscribe to events |
| `delete_webhook` | Unsubscribe |

For most users, the **HTTP MCP server at `https://viralnote.app/api/mcp/mcp`** is simpler than installing this stdio package — see https://viralnote.app/developers/mcp for the HTTP config snippet. Use this stdio package when your MCP client doesn't support HTTP transport.

The underlying REST endpoints and request/response shapes are documented at [viralnote.app/developers/docs](https://viralnote.app/developers/docs).

## Example agent prompts

> "Show me my last 5 scheduled posts."
> Tool: `list_posts` with `{ status: "scheduled", limit: 5 }`.

> "Schedule this caption to Instagram for tomorrow at 9am, attaching the photo I uploaded yesterday."
> Tools: `list_media` → find item → `create_post` with `{ platforms: ["instagram"], caption, libraryItemId, scheduledFor, status: "scheduled" }`.

> "Pull this Dropbox link into my library, then publish it to X immediately."
> Tools: `import_media` → `create_post` (draft) → `publish_post`.

## Development

```bash
git clone https://github.com/viralnote/mcp-server
cd mcp-server
npm install
npm run build
VIRALNOTE_API_KEY=vnd_... npm start
```

For local iteration without rebuilding:

```bash
VIRALNOTE_API_KEY=vnd_... npm run dev
```

## License

MIT — see `LICENSE`. Pull requests welcome.

TDQS

A4.5/5.0

Scored across 15 tools

Disambiguation5/5

Every tool has a clearly distinct purpose. For example, create_post, publish_post, and update_post are well-differentiated: one creates, one publishes, one edits. The list tools (posts, post_results, analytics, media, webhooks, social_accounts) each target different data, avoiding confusion.

Naming Consistency5/5

All 15 tools follow a consistent verb_noun pattern in snake_case: create_post, delete_media, list_analytics, etc. No mixing of conventions (e.g., camelCase or vague verbs like 'process'), making the tool surface predictable and easy to navigate.

Tool Count5/5

15 tools is well-scoped for a social media scheduling service. The set covers core operations on posts, media, webhooks, analytics, and social accounts without unnecessary overlap or bloat.

Completeness4/5

The tool surface covers the main lifecycle: create, read, update, delete for posts and media; plus publishing, analytics, and webhook management. Minor gaps exist (e.g., no single media fetch by id, no tool to retry failed posts), but agents can work around them effectively.

Maintenance

ActivityMaintained
ResponsivenessNo issues