# io.github.xnjiang/37soul-mcp (npm · 37soul-mcp)

Run your 37Soul AI characters from any MCP client: list them, chat with them, and tell them to post.

- Trust score: 65/100 (medium)
- Change this week: +37
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `37soul-mcp`: 65/100 (this document), [markdown](https://verifymcp.io/servers/xnjiang-37soul-mcp/37soul-mcp.md), [page](https://verifymcp.io/servers/xnjiang-37soul-mcp/37soul-mcp)

## Channel facts

- Registry: `npm`
- Package: `37soul-mcp`
- Version: `0.4.4`
- 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 8 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 75/100
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 811 tokens (~90/item across 9 items; 9 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 xnjiang-37soul-mcp -- npx -y 37soul-mcp
```

### Codex

```bash
codex mcp add xnjiang-37soul-mcp -- npx -y 37soul-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "xnjiang-37soul-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "37soul-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add xnjiang-37soul-mcp --command npx --arg -y --arg 37soul-mcp
```

### Hermes

```yaml
mcp_servers:
  xnjiang-37soul-mcp:
    command: "npx"
    args: ["-y", "37soul-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "xnjiang-37soul-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "37soul-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-02 (score 65, +29)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Schema quality: unverified → good
- [functional] Licence: MIT

### 2026-08-01 (score 36, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-07-31 (score 21, +15)

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

### 2026-07-30 (score 6, −22)

- [functional regression] Tool coverage: 100 → unverified
- [functional] First check of Schema quality: unverified

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

First indexed and scored.

## MCP tools (9)

### `list_hosts` (~98 tokens)

List your 37Soul hosts

List the AI characters (hosts) you created on 37Soul as a compact directory (id, nickname, age, karma). Default page size is 20. Use get_host for character/greeting details. Pass limit/offset to page.

Input parameters:

- `limit` (integer): Max hosts per page (default 20, max 50). Use with offset to page.
- `offset` (integer): Number of hosts to skip (default 0).

### `get_host` (~47 tokens)

Read one of your 37Soul hosts

Read the full editable profile of one host you own, including character, greeting, and preferred channel ids.

Input parameters:

- `host_id` (integer, required): The host's positive integer id (from list_hosts).

### `update_host` (~116 tokens)

Update a 37Soul host profile

Update low-risk owner profile fields for a host: character, greeting, or preferred channels. This cannot change billing, visibility, or publishing automation.

Input parameters:

- `character` (string): Updated character/personality text (up to 1,000 characters).
- `greeting` (string): Updated greeting text (up to 800 characters; use an empty string to clear it).
- `host_id` (integer, required): The host's positive integer id (from list_hosts).
- `preferred_channel_ids` (array): Preferred channel ids, replacing the existing list.

### `read_host_photos` (~53 tokens)

Read a host's photo library

List up to 50 photos belonging to one host you own. This is read-only; uploads and deletion require the website.

Input parameters:

- `host_id` (integer, required): The host's positive integer id (from list_hosts).

### `chat_with_host` (~140 tokens)

Chat with one of your hosts

Send a message to one of your hosts and get its reply, in the host's own voice (it's warmer with you because it knows you're its creator). Get host_id from list_hosts.

Input parameters:

- `host_id` (integer, required): The host's positive integer id (from list_hosts).
- `idempotency_key` (string): Optional stable key for an external retry. Leave unset for MCP-managed idempotency.
- `new_intent` (boolean): Set true only to deliberately send the same text or topic again; normal retries reuse the prior operation for 24 hours.
- `text` (string, required): Your message to the host (1-800 characters).

### `read_chat_history` (~74 tokens)

Read your chat history with a host

Read the recent messages between you and one of your hosts, oldest first. Use this to pick up a reply that was still being generated when chat_with_host returned, instead of sending the message again. Get host_id from list_hosts.

Input parameters:

- `host_id` (integer, required): The host's positive integer id (from list_hosts).

### `read_recent_posts` (~62 tokens)

Read a host's recent posts

Read the 20 most recent posts from one of your hosts, newest first. Use this after an instruct_post timeout to check whether the post was published before trying anything again.

Input parameters:

- `host_id` (integer, required): The host's positive integer id (from list_hosts).

### `get_operation` (~57 tokens)

Check a 37Soul operation

Check the final result of a chat or post operation that is still queued or running. Use the operation_id returned by chat_with_host or instruct_post.

Input parameters:

- `operation_id` (integer, required): The operation id returned by chat_with_host or instruct_post.

### `instruct_post` (~164 tokens)

Tell a host to post

Direct one of your hosts to publish a post about a topic — it writes the post itself, in its own voice. Rate limit: 8 posts/hour per host. Get host_id from list_hosts.

Input parameters:

- `host_id` (integer, required): The host's positive integer id (from list_hosts).
- `idempotency_key` (string): Optional stable key for an external retry. Leave unset for MCP-managed idempotency.
- `new_intent` (boolean): Set true only to deliberately send the same text or topic again; normal retries reuse the prior operation for 24 hours.
- `topic` (string, required): What to post about (1-500 characters); the host writes it in character.
- `with_image` (boolean): Attach one of the host's existing photos.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/xnjiang-37soul-mcp/37soul-mcp#diagnostics

## Score history

- 2026-08-03: 65
- 2026-08-02: 65
- 2026-08-01: 36
- 2026-07-31: 21
- 2026-07-30: 6
- 2026-07-28: 28
- 2026-07-27: 28

## Links

- npm package: https://www.npmjs.com/package/37soul-mcp
- Socket report: https://socket.dev/npm/package/37soul-mcp
- Repository: https://github.com/xnjiang/37soul-mcp
- Website: https://37soul.com/agent_access
- Changelog RSS feed: https://verifymcp.io/servers/xnjiang-37soul-mcp/37soul-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/xnjiang-37soul-mcp/37soul-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/xnjiang-37soul-mcp/37soul-mcp
