Skip to main content
Glama

evox-mcp

Version MCP Server TypeScript Node.js Evox Engine License: MIT

Model Context Protocol (MCP) server for managing and compiling songbook PDFs using Evox.

evox-mcp exposes a structured, validated AST interface for AI agents to inspect, author, edit, and compile songbooks into high-quality PDFs with custom covers, multi-column lyrics, aligned chords, and an automatic Table of Contents.


Features

  • Strict Song AST Interface: Agents read and write structured JSON (SongAst), preventing subtle syntax bugs (omitted lyric spaces, column delimiter collisions, unescaped chord characters).

  • Upstream Evox Guardrails:

    • Automatically cleans OS dotfiles (.DS_Store, Thumbs.db) from songs/ to prevent CLI crashes.

    • Enforces song title lengths (<= 60 chars) to avoid Table of Contents negative leader line crashes.

    • Validates chord/lyric characters against Evox reserved symbols (-- and .).

    • Probes CLI capabilities dynamically (--skip-cover).

  • Complete Songbook Lifecycle:

    • init_songbook: Initialize folder layout (book/, cover/, songs/).

    • get_songbook: Check status, cover, logo, alphabetical song order, and PDF freshness.

    • get_cover & update_cover: Customize header/footer text, padding, and copy local logo images.

    • list_songs, get_song, create_song, update_song, delete_song: Song AST CRUD.

    • generate_songbook: Compile book/book.pdf and return generated TOC pagination.

  • MCP Resources & Prompts:

    • Resources: evox://songbook, evox://songs, evox://songs/{slug}.

    • Prompts: import_chord_sheet (tab & chord sheet converter) and build_songbook (end-to-end songbook compiler).


Related MCP server: Document Generator MCP

Prerequisites

  1. Ruby (>= 3.0)

  2. Evox Gem:

    gem install evox

Installation & Build

# Clone and install dependencies
cd /Users/leonid/src/evox-mcp
npm install

# Typecheck and test
npm run typecheck
npm test

# Build executable bundle
npm run build

Configuration

evox-mcp can be configured via environment variables:

Environment Variable

Default

Description

EVOX_PROJECT_DIR

Current working directory

Path to default songbook project directory.

EVOX_BIN

evox

Path to the evox CLI executable.

EVOX_READ_ONLY

false

When true, rejects mutating tools (init_songbook, update_cover, create_song, update_song, delete_song, generate_songbook).

EVOX_TIMEOUT_MS

30000

Subprocess timeout for Evox CLI commands in milliseconds.


MCP Client Configuration Example

In claude_desktop_config.json or Antigravity MCP settings:

{
  "mcpServers": {
    "evox": {
      "command": "node",
      "args": [
        "/Users/leonid/src/evox-mcp/dist/index.js"
      ],
      "env": {
        "EVOX_PROJECT_DIR": "/Users/leonid/Documents/MySongbook",
        "EVOX_BIN": "evox"
      }
    }
  }
}

Song AST Schema

Songs are represented as JSON ASTs with 0-indexed chord-over-lyric lines:

{
  "slug": "free_falling",
  "metadata": {
    "name": "Free Falling",
    "author": "Tom Petty",
    "font": 9.0,
    "column_width": 610,
    "gutter": 5
  },
  "columns": [
    {
      "stanzas": [
        {
          "lines": [
            {
              "chords": "        C    F     F     C     G",
              "lyrics": "She's a good girl, loves her mama"
            },
            {
              "chords": "     C    F     F     C    G",
              "lyrics": "Loves Jesus and America too"
            }
          ]
        }
      ]
    }
  ]
}

License

MIT © Leonid Medovyy

Available Tools

10 tools
create_songB

Creates a new song from a validated structured AST. Automatically formats and serializes to .evox markup.

Inputs: columns (required), metadata (required), slug, upsert, +1 more.

delete_songC

Deletes a song (.evox file) from the songs/ folder.

Inputs: slug (required), project_dir.

generate_songbookA

Compiles the songbook into book/book.pdf using 'evox generate'. Automatically cleans stray OS files from songs/, validates all song syntax, and returns the generated PDF details with the alphabetical Table of Contents.

Inputs: skip_cover, project_dir.

get_coverB

Reads cover/config.yml configuration (header, logo dimensions, footer) and logo image file status.

Inputs: project_dir.

get_songA

Retrieves the full structured AST for a song by slug (including title, artist, font, column width, gutter, and all column/stanza lines with chord-lyric pairs).

Inputs: slug (required), project_dir.

get_songbookA

Returns comprehensive status of the songbook: directory initialization, cover settings, logo presence, song summaries in alphabetical print order, stray file warnings, and PDF build freshness.

Inputs: project_dir.

init_songbookB

Initializes a new Evox songbook project directory structure (book/, cover/, songs/) using 'evox init'.

Inputs: cover, project_dir, include_sample_songs.

list_songsA

Lists all songs in the songbook in alphabetical print order (matching the order in the compiled PDF and Table of Contents).

Inputs: project_dir.

update_coverA

Updates cover/config.yml settings (header titles/padding, logo size/image name, footer title/size) and optionally copies a new local image into cover/.

Inputs: logo, footer, header, project_dir, +1 more.

update_songB

Updates an existing song. Supports partial metadata changes, replacing columns, and/or renaming the song slug.

Inputs: slug (required), columns, metadata, new_slug, +1 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.6/5.0

    Scored across 10 tools

    Disambiguation4/5

    Each tool maps to a distinct resource+action pair: songbook-level (init/get/generate), cover (get/update), and song CRUD (list/get/create/update/delete). There is mild overlap in that get_songbook returns song summaries and cover status, which partially duplicates list_songs and get_cover, but the descriptions make the intended granularity clear.

    Naming Consistency5/5

    All ten tools follow a strict verb_noun snake_case pattern (init_songbook, get_cover, update_song, delete_song, generate_songbook). The only variation is domain-specific verb choice (init vs create, generate), which is still readable and predictable.

    Tool Count5/5

    At 10 tools the surface is well-scoped: one init, one status, one build, two cover operations, and five song operations. No tool appears redundant or out of place for a songbook CLI wrapper.

    Completeness4/5

    Full lifecycle is covered for songs (list/get/create/update/delete) plus project init, status, cover config, and PDF generation. Minor gaps exist: no way to remove the logo image or delete/reset the songbook project, but these are workaroundable and non-blocking for core workflows.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      Enables collaborative document authoring and composition with project-based organization, transforming Markdown and LaTeX content into professional PDFs with conflict-free multi-agent editing capabilities.
      6
      20
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Enterprise-grade PDF engine for AI agents. Pure TypeScript, zero-dependency, sandboxed, and local-first. Exposes 28 tools to generate ISO-compliant PDF/A documents, inspect layouts, extract text, handle digital signatures (PKCS#7), and render high-performance tables (10,000+ rows/s).
      28
      391 npm
      2
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Enables AI agents to turn Markdown manuscripts and metadata into KDP-ready Kindle EPUBs, print interior PDFs, and full-wrap paperback covers, with spine width calculation and an upload checklist.
      3
      MIT