Skip to main content
Glama
README.md
# armavita-quo-mcp

<p align="center">
  <img src="docs/assets/armavita-quo-mcp-hero-1080.jpg" alt="ArmaVita Quo MCP hero image" width="100%" />
</p>

<p align="center"><strong>Brought to you by <a href="https://armavita.com">ArmaVita.com</a></strong></p>
<p align="center">Need a custom implementation? <a href="https://armavita.com">Contact us</a>.</p>

`armavita-quo-mcp` is a local-first MCP server for Quo API workflows (messaging, calls, contacts, users, phone numbers, and webhooks).

- MCP transport: local `stdio`
- Runtime: Node.js 18+
- Auth: `QUO_API_KEY`
- License: AGPL-3.0-only

## Install

```bash
npm install
```

## Run

```bash
bash ./run.sh
```

`run.sh` verifies Node/npm, installs dependencies if needed, then starts the MCP server.

## Required Environment Variable

- `QUO_API_KEY`: Quo API key used for all API calls.

Optional:

- `QUO_HTTP_TIMEOUT_MS`: request timeout in milliseconds (default: `30000`).

## Quick MCP Client Config

Use this pattern in your MCP client config:

```json
{
  "mcpServers": {
    "armavita-quo-mcp": {
      "command": "bash",
      "args": ["/absolute/path/to/armavita-quo-mcp/run.sh"],
      "env": {
        "QUO_API_KEY": "YOUR_QUO_API_KEY"
      }
    }
  }
}
```

If your client launches from this folder, you can use:

```json
{
  "mcpServers": {
    "armavita-quo-mcp": {
      "command": "bash",
      "args": ["./run.sh"],
      "env": {
        "QUO_API_KEY": "YOUR_QUO_API_KEY"
      }
    }
  }
}
```

## Tool Coverage

- Messages: `send_text`, `list_messages`, `get_message`
- Conversations: `list_conversations`
- Contacts: `create_contact`, `list_contacts`, `get_contact`, `update_contact`, `delete_contact`, `get_contact_custom_fields`
- Calls: `list_calls`, `get_call`, `get_call_recordings`, `get_call_summary`, `get_call_transcription`, `get_voicemail`
- Phone numbers: `list_phone_numbers`, `get_phone_number`
- Users: `list_users`, `get_user`
- Webhooks: `list_webhooks`

## Pagination

- List endpoints expose Quo pagination parameters such as `maxResults` and `pageToken`.
- Preserve and pass forward returned page tokens to continue pagination.

## Usage Notes

- Use E.164 format for phone numbers where required (for example `+18325551234`).
- `update_contact` requires at least one field to update.
- API failures are returned from Quo status and response details, with secrets redacted in server error paths.

## Security

- Never commit real `QUO_API_KEY` values.
- Keep credentials in client/server env config, not in source files.
- Use separate keys for dev/staging/prod.

## Docs

- [Authentication](docs/authentication.md)
- [Tool Reference](docs/tool-reference.md)

## Scope

- This repository is an OSS local MCP server.
- Transport mode is local `stdio` only.
- Tool aliases are intentionally not exposed.

## Development

Syntax check:

```bash
npm run check
```

Start directly:

```bash
npm start
```

## License

GNU Affero General Public License v3.0 (AGPLv3). See `LICENSE`.

TDQS

A3.5/5.0

Scored across 21 tools

Disambiguation4/5

Most tools have distinct purposes targeting specific resources like contacts, calls, messages, phone numbers, users, and webhooks, with clear action distinctions (e.g., create_contact vs. update_contact). However, some potential overlap exists between list_calls and list_conversations, as calls might be part of conversations, which could cause minor confusion for agents.

Naming Consistency5/5

Tool names follow a highly consistent verb_noun pattern throughout, such as create_contact, list_calls, get_user, and send_text. All tools use snake_case with clear verbs (create, delete, get, list, update, send), making them predictable and easy to understand.

Tool Count4/5

With 21 tools, the count is slightly high but reasonable for a comprehensive CRM/communication platform like Quo, covering contacts, calls, messages, phone numbers, users, and webhooks. It feels a bit heavy but not excessive, as each tool serves a specific function in the domain.

Completeness5/5

The tool set provides complete CRUD/lifecycle coverage for the domain, including create, get, list, update, and delete operations for contacts, calls, messages, phone numbers, users, and webhooks. There are no obvious gaps; agents can perform core workflows like managing contacts, handling calls, and sending messages without dead ends.

Maintenance

ActivityInactive
ResponsivenessNo issues