Skip to main content
Glama
jullury

Shoanta MCP Server

by jullury
README.md
# Shoanta MCP Server

A **stdio-based MCP (Model Context Protocol) server** that lets any AI agent
(Claude, opencode, Cursor, Windsurf, etc.) read and update Shoanta documents
through the Shoanta REST API (`/api/v1`).

The MCP server is a thin proxy: it calls the Shoanta HTTP API using a
workspace-scoped API token, so all agents share the same auth and data.

This package is published to **npm** as `@jullury/shoanta-mcp` — install it (or run it on demand with `npx`) rather than building from source.

## Installing

Install the package globally (or in a project) so the `shoanta-mcp` command is
available:

```bash
npm install -g @jullury/shoanta-mcp
# or, without installing: npx -y @jullury/shoanta-mcp
```

Alternatively, run it on demand without a global install:

```bash
npx -y @jullury/shoanta-mcp
```

To build from source instead (e.g. for development):

```bash
cd mcp
npm install
npm run build   # bundles to dist/index.mjs
```

The built `dist/index.mjs` inlines all dependencies and runs on Node 20+.

## Configuration

The server needs two environment variables:

| Variable            | Description                                                |
| ------------------- | ---------------------------------------------------------- |
| `SHOANTA_API_URL`   | Shoanta base URL, e.g. `https://shoanta.jullury.com`       |
| `SHOANTA_API_TOKEN` | API token created in **Workspace Settings → API tokens**   |

The token is workspace-scoped, so the server derives the workspace from the
token itself — you don't need to configure a workspace slug.

Create a token in the Shoanta app, add the two values to your environment,
and run the server:

```bash
SHOANTA_API_URL=https://shoanta.jullury.com \
SHOANTA_API_TOKEN=shoanta_... \
npx -y @jullury/shoanta-mcp
```

## Tools

| Tool                   | Description                                       |
| ---------------------- | ------------------------------------------------- |
| `list_collections`     | List all collections (databases) in the workspace |
| `list_documents`       | List all documents in a collection                |
| `get_document`         | Get one document by ID (with property values)     |
| `create_document`      | Create a document in a collection                 |
| `update_document`      | Update title, content, and/or property values     |
| `delete_document`      | Delete a document (or archive with `archive: true`) |
| `list_comments`        | List comments on a document                       |
| `add_comment`          | Add a comment to a document                       |

## Connecting an agent

Point your agent's MCP config at the built file with stdio transport.

### opencode

```jsonc
// opencode.json
{
  "mcp": {
    "Shoanta": {
      "type": "local",
      "command": ["npx", "-y", "@jullury/shoanta-mcp"],
      "enabled": true,
      "environment": {
        "SHOANTA_API_URL": "https://shoanta.jullury.com",
        "SHOANTA_API_TOKEN": "shoanta_..."
      }
    }
  }
}
```

### Claude Desktop

```jsonc
// claude_desktop_config.json
{
  "mcpServers": {
    "shoanta": {
      "command": "npx",
      "args": ["-y", "@jullury/shoanta-mcp"],
      "env": {
        "SHOANTA_API_URL": "https://shoanta.jullury.com",
        "SHOANTA_API_TOKEN": "shoanta_..."
      }
    }
  }
}
```

### Cursor / Windsurf

Add the server with `command: npx`, args `["-y", "@jullury/shoanta-mcp"]`, and
the two environment variables set. The package is fetched from npm on first
run, so no local build is required.

TDQS

A3.7/5.0

Scored across 8 tools

Disambiguation5/5

Each tool targets a distinct resource and action combination: collections, documents, and comments are clearly separated, and list/get/create/update/delete/add all have unique meanings. There is no practical ambiguity between tools.

Naming Consistency5/5

Tool names consistently follow a snake_case verb_noun pattern. The only slight variation is add_comment versus create_document, but add is still a clear action verb in the same style, so the naming remains predictable.

Tool Count5/5

Eight tools is a well-scoped number for a document workspace with collections, documents, and comments. Each tool serves a necessary purpose without redundancy or unnecessary bloat.

Completeness4/5

Documents have full CRUD coverage, and collections and comments have basic list/create operations. Minor gaps include lack of comment updating/deleting, collection management beyond listing, and document search, but these can be worked around with the existing tools.

Maintenance

ActivitySlowing
ResponsivenessNo issues