Skip to main content
Glama
jullury

Shoanta MCP Server

by jullury

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:

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

Alternatively, run it on demand without a global install:

npx -y @jullury/shoanta-mcp

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

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

Related MCP server: mcp-google-sheets

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:

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

// 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

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

Available Tools

8 tools
add_commentAdd commentB

Add a comment to a document.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesComment body
documentIdYesDocument ID

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. 'Add a comment' implies a mutating operation, but it does not disclose permissions, idempotency, whether the comment is appended or replaces existing comments, or what the response will contain.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler. Every word contributes to the core action and target.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter mutation with no output schema, this is adequate but minimal. It covers the basic action, but omits any guidance on return values, edge cases, or behavioral expectations beyond the literal sentence.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both documentId and body are already documented in the schema. The description adds no additional parameter-level meaning, which matches the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the clear verb 'Add' with a specific resource ('comment') and target ('document'). This distinguishes it from sibling tools like delete_document or list_comments, though it does not explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: use this tool when you need to add a comment to a document. However, there is no explicit guidance on when to choose this over list_comments or how it relates to update_document, leaving some inference to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_documentCreate documentC

Create a new document in a collection.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesDocument title
contentNoDocument content (markdown)
propertiesNoProperty values keyed by property name, e.g. {"Status":"Done","Priority":"High"}
collectionIdYesID of the collection (database)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states only the core mutation ('create') but does not disclose whether a collection must already exist, how ID assignment works, whether properties are validated, what side effects occur, or what the response will be. This is a key transparency gap for a write operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no redundant wording. It is easy to parse, but its brevity leaves out behavioral and usage context that would improve the definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create operation with nested properties, no output schema, and no annotations, the description is incomplete. It does not explain what happens after creation, whether a response returns the new document, how to locate the collection, or how properties and content relate to the document. The provided context signals do not compensate for this gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters. The description itself adds no parameter-level meaning beyond what the schema provides, meeting the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a clear verb+resource pair ('Create a new document') and clarifies the container ('in a collection'). It distinguishes this from sibling tools that update, delete, or list documents. However, it is quite close to the title and doesn't add much depth about the collection concept.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you want to add a new document, but it gives no explicit when-to-use guidance, no conditions, and no pointers to alternatives such as update_document for existing documents or list_collections to find collection IDs. There are no exclusions or prerequisites stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_documentDelete documentA

Delete a document. If archive is true, it is moved to trash instead of being permanently deleted.

ParametersJSON Schema
NameRequiredDescriptionDefault
archiveNoArchive instead of hard-delete
documentIdYesDocument ID

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It does disclose a key behavioral distinction: archive=true moves to trash, otherwise it is permanently deleted. Yet it omits consequences like whether trash items are recoverable, permission requirements, cascading effects on comments, or what response is returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The primary statement is front-loaded, and the conditional behavioral detail is placed in the second sentence. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple delete tool with two parameters and no nested objects, the description is largely complete: it identifies the action, required resource, and the important archive distinction. It could mention side effects on related resources or error conditions, but those are secondary for basic invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters. The description adds only modest interpretation by rewording the archive flag ('moved to trash instead of being permanently deleted'), which is essentially the same as the schema's 'Archive instead of hard-delete.' Therefore baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: 'Delete a document.' It also clarifies the two possible outcomes (trash vs permanent deletion), which distinguishes it from siblings like create_document and update_document. However, it does not explicitly name or contrast itself with sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tool's purpose is implied by its name and description: use when a document should be removed. The archive condition provides parameter-level guidance but no explicit when-to-use versus alternatives like update_document or list_documents. There are no exclusions or prerequisites mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_documentGet documentA

Get a single document by ID, including its property values.

ParametersJSON Schema
NameRequiredDescriptionDefault
documentIdYesDocument ID

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral burden. It makes the read-only nature clear through 'Get' and adds that property values are returned, but it does not disclose error behavior, permissions, or whether a missing ID returns an error or empty result.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single concise sentence with no filler. Every word contributes meaning: 'single', 'by ID', and 'including its property values' are all useful to the agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read operation with no output schema, the description is sufficient: it tells the agent the required input and the returned content. It could optionally mention not-found behavior, but that is not essential for invoking the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with documentId already described as 'Document ID', so the baseline is 3. The description adds essentially nothing about parameter format beyond 'by ID', though it does clarify the return content by mentioning property values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and resource ('single document by ID'), and 'single' clearly differentiates it from sibling tools like list_documents and create_document. An agent can immediately tell this is the fetch-one-document operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context of needing a single document by ID is implied, and 'including its property values' hints at what the caller receives. However, it does not explicitly state when to prefer this over list_documents or mention any exclusions or alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_collectionsList collectionsA

List all collections (databases) in the Shoanta workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It adds useful scope and terminology context, but does not disclose return format, ordering, pagination, or any constraints. The read-only nature is implied by 'List' but not explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler, front-loading the action and scope immediately. Every word contributes meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description adequately identifies the operation and scope. It could mention that the result is a list of collection definitions, but this is largely implied by 'List all collections'.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description appropriately does not need to explain parameter semantics since there are none to clarify.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and resource ('collections (databases)') within a defined scope ('Shoanta workspace'). It is clearly distinguishable from sibling tools like list_documents, which targets a different resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives such as list_documents. The intended context is only implicit from the name and description, with no exclusions or routing cues.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_commentsList commentsB

List comments on a document.

ParametersJSON Schema
NameRequiredDescriptionDefault
documentIdYesDocument ID

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states that comments are listed, but does not mention ordering, pagination, response shape, permissions, or whether deleted/threaded comments are included.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no fluff. It conveys the core action and object efficiently, and the structure is easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read tool, the description is minimally sufficient to invoke it correctly because the documentId is clear. However, with no output schema and no annotations, the absence of return format or additional behavioral details leaves clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the documentId parameter is already described as 'Document ID'. The description adds a small amount of context by clarifying that comments are associated with a document, but does not significantly expand on the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'List comments on a document' uses a specific verb and resource, and scopes it to a document, which clearly distinguishes it from siblings like list_documents, get_document, and add_comment. An agent can identify exactly what this tool does without needing to inspect the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as add_comment or get_document. There is no mention of exclusions, prerequisites, or preferred use cases beyond the implied purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_documentsList documentsA

List all documents in a collection.

ParametersJSON Schema
NameRequiredDescriptionDefault
collectionIdYesID of the collection (database)

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'List all documents' and does not state return format, pagination or ordering behavior, error handling, or whether it is strictly read-only.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler or redundant wording. Every word contributes to the core meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The operation is simple and the only parameter is fully documented, but with no output schema or annotations, the description could usefully mention what is returned and any default ordering or pagination behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes collectionId with 100% coverage as 'ID of the collection (database)'. The description adds no additional parameter meaning, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List), resource (documents), and scope (a collection), and is clearly distinguishable from siblings like get_document, list_collections, and list_comments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use case is implied: retrieving all documents within a collection. However, it does not explicitly contrast with alternatives such as get_document for a single document or list_collections for collections.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_documentUpdate documentA

Update document title, content, and/or property values. Only provided fields are changed.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoNew title
contentNoNew content (markdown)
documentIdYesDocument ID
propertiesNoProperty values keyed by property name, e.g. {"Status":"Done","Priority":"High"}

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. The phrase 'Only provided fields are changed' is valuable because it reveals partial-update semantics that are not obvious from the schema alone. However, it does not mention permissions, reversibility, or how nested properties are merged or replaced.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one front-loaded sentence with no filler. It states the operation, the target, the affected fields, and the key partial-update behavior efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, this is adequate but minimal. It covers the core operation and the partial-update rule, yet it leaves out explicit usage guidance, return/response expectations, and any error or authorization context that would help an agent invoke it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so every parameter already has a description in the schema. The description adds the meaningful patch-like semantic that only provided fields change, but it does not go beyond what the schema and that sentence already convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Update document') and enumerates the exact affected attributes: title, content, and/or property values. This clearly distinguishes update_document from create_document, get_document, delete_document, and the comment tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not-to-use guidance is provided, and sibling tools are not named. Usage is implied by the verb and resource rather than stated, so an agent must infer that this is for modifying an existing document rather than creating or deleting one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 8 tool updatesv0.2.0
    • First observedadd_comment
    • First observedcreate_document
    • First observeddelete_document
    • First observedget_document
    • First observedlist_collections
    • First observedlist_comments
    • First observedlist_documents
    • First observedupdate_document

TDQS

A3.7/5.0
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

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jullury/shoanta-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server