# com.politicalcomms/api (npm · @political-comms/mcp)

Compliant political SMS/MMS from MCP clients: projects, contacts, analytics, billing.

- Trust score: 66/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `@political-comms/mcp`: 66/100 (this document), [markdown](https://verifymcp.io/servers/com-politicalcomms-api/political-comms-mcp.md), [page](https://verifymcp.io/servers/com-politicalcomms-api/political-comms-mcp)

## Channel facts

- Registry: `npm`
- Package: `@political-comms/mcp`
- Version: `0.2.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, 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-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 2 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 81/100
  - AI-judged instruction clarity (excellent).
  - Tool/resource definitions use about 1363 tokens (~90/item across 15 items; 15 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add com-politicalcomms-api -- npx -y @political-comms/mcp
```

### Codex

```bash
codex mcp add com-politicalcomms-api -- npx -y @political-comms/mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-politicalcomms-api": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@political-comms/mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-politicalcomms-api --command npx --arg -y --arg @political-comms/mcp
```

### Hermes

```yaml
mcp_servers:
  com-politicalcomms-api:
    command: "npx"
    args: ["-y", "@political-comms/mcp"]
```

### Other

```json
{
  "mcpServers": {
    "com-politicalcomms-api": {
      "command": "npx",
      "args": [
        "-y",
        "@political-comms/mcp"
      ]
    }
  }
}
```

## 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-08-03 (score 66, +25)

- [security regression] Provenance: unverified → fail
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Install scripts: unverified → pass
- [functional improvement] Schema quality: unverified → excellent
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional] Licence: MIT

### 2026-08-02 (score 41, +20)

- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] MCP protocol: unverified → pass

### 2026-08-01 (score 21, −7)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-31 (score 28)

First indexed and scored.

## MCP tools (15)

### `list_organizations` (~32 tokens)

List all organizations visible to the API key, including their status and parent organization. Also useful as a credential check.

### `get_hierarchy` (~43 tokens)

Get the full organization hierarchy tree visible to the API key, including nested child organizations and their brands.

Input parameters:

- `organization_id` (string): Filter to a specific descendant organization

### `list_projects` (~80 tokens)

List messaging projects (a project is one composed send: message text, sending numbers, and contact lists). Optionally filter by organization, brand, or campaign.

Input parameters:

- `brand_id` (string): Filter to a specific brand
- `campaign_id` (string): Filter to a specific campaign
- `organization_id` (string): Filter to a specific descendant organization

### `get_project` (~47 tokens)

Get one project by ID with its full configuration: status, channel, message text, phone numbers, contact lists, link tracking settings, and schedule.

Input parameters:

- `id` (string, required): Resource ID

### `get_project_stats` (~48 tokens)

Get delivery and engagement stats for one project: sent, delivered, undeliverable, replies, opt outs, clicks, and the derived rates.

Input parameters:

- `id` (string, required): Resource ID

### `list_contact_lists` (~55 tokens)

List contact lists with their contact counts and import status. Optionally filter by organization or brand.

Input parameters:

- `brand_id` (string): Filter to a specific brand
- `organization_id` (string): Filter to a specific descendant organization

### `get_contact_list` (~35 tokens)

Get one contact list by ID, including import progress and list analysis results when available.

Input parameters:

- `id` (string, required): Resource ID

### `get_message_stats` (~105 tokens)

Get aggregate message stats (totals and daily breakdown) for a date range, optionally filtered by organization, brand, or campaign.

Input parameters:

- `brand_id` (string): Filter to a specific brand
- `campaign_id` (string): Filter to a specific campaign
- `end_date` (string, required): End date in YYYY-MM-DD format
- `organization_id` (string): Filter to a specific descendant organization
- `start_date` (string, required): Start date in YYYY-MM-DD format

### `get_ledger_usage` (~77 tokens)

Get billing usage totals and per-category breakdown from the ledger for a date range, optionally filtered to a descendant organization.

Input parameters:

- `end_date` (string, required): End date in YYYY-MM-DD format
- `organization_id` (string): Filter to a specific descendant organization
- `start_date` (string, required): Start date in YYYY-MM-DD format

### `create_project` (~334 tokens)

Create a new messaging project (a draft send). Requires the owning organization, a name, protocol (sms or mms), sending phone number IDs, contact list IDs, and the message text. For channel=10dlc also pass brand_id and campaign_id; for channel=toll-free pass toll_free_verification_id. Creating a project does not send messages by itself.

Input parameters:

- `brand_id` (string): Required when channel=10dlc
- `campaign_id` (string): Required when channel=10dlc
- `channel` (string): Messaging channel. Defaults to 10dlc.
- `confirm` (boolean, required): Must be true to run this write operation. Set it only after the user has explicitly confirmed.
- `contact_list_ids` (array, required): Contact list IDs to send to
- `link_tracking_destination_url` (string): Destination URL for tracked links
- `link_tracking_domain_id` (string): Tracking domain ID
- `link_tracking_enabled` (boolean): Enable link tracking
- `link_tracking_param_field` (string): Contact field appended as a redirect query param on tracking links
- `media_ids` (array): Media file IDs for MMS
- `message_text` (string, required): The message body to send
- `name` (string, required): Project name
- `organization_id` (string, required): Owning organization ID
- `phone_number_ids` (array, required): Sending phone number IDs (1-49)
- `protocol` (string, required): Message protocol
- `suppression_list_ids` (array): Contact list IDs to suppress
- `toll_free_verification_id` (string): Required when channel=toll-free

### `test_project` (~85 tokens)

Send real test messages for a project to up to 50 explicit phone numbers. This delivers actual SMS or MMS to those recipients and incurs cost.

Input parameters:

- `confirm` (boolean, required): Must be true to run this write operation. Set it only after the user has explicitly confirmed.
- `id` (string, required): Resource ID
- `phones` (array, required): Recipient phone numbers for the test send

### `schedule_project` (~114 tokens)

Schedule a project to send to its full contact lists at a specific date and time. This commits a real bulk send to every contact on the lists once the scheduled time arrives.

Input parameters:

- `confirm` (boolean, required): Must be true to run this write operation. Set it only after the user has explicitly confirmed.
- `id` (string, required): Resource ID
- `scheduled_at` (string, required): ISO 8601 date-time at which to send
- `scheduled_timezone` (string, required): IANA timezone name, for example America/New_York

### `unschedule_project` (~44 tokens)

Remove the schedule from a project so it will not send. Safe to call repeatedly; the project returns to an unscheduled state.

Input parameters:

- `id` (string, required): Resource ID

### `copy_project` (~71 tokens)

Copy an existing project into a new draft. The copy keeps the message, phone numbers, and settings but drops contact lists, schedule, and stats, and gets a versioned name (X becomes X_v2). Copying never sends messages.

Input parameters:

- `project_id` (string, required): ID of the project to copy

### `archive_project` (~55 tokens)

Archive a completed project so it no longer appears in default project listings. Only projects in completed status can be archived; other statuses are rejected with INVALID_STATE_TRANSITION.

Input parameters:

- `project_id` (string, required): ID of the project to archive

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/com-politicalcomms-api/political-comms-mcp#diagnostics

## Score history

- 2026-08-03: 66
- 2026-08-02: 41
- 2026-08-01: 21
- 2026-07-31: 28

## Links

- npm package: https://www.npmjs.com/package/@political-comms/mcp
- Socket report: https://socket.dev/npm/package/@political-comms/mcp
- Repository: https://github.com/Political-Comms/political-comms-sdk
- Changelog RSS feed: https://verifymcp.io/servers/com-politicalcomms-api/political-comms-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-politicalcomms-api/political-comms-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/com-politicalcomms-api/political-comms-mcp
