Skip to main content
Glama
parchmark-mcp

parchmark-mcp

by TejGandham

parchmark-mcp

MCP server for managing ParchMark notes via Claude Code/Desktop.

Installation

# Run directly
uvx --from git+https://github.com/TejGandham/parchmark-mcp parchmark-mcp

# Or install
pip install git+https://github.com/TejGandham/parchmark-mcp

Related MCP server: MCP Notes Server

Upgrading

Caveat: the uvx --from git+… install above is unpinned, but uvx caches the resolved git commit and reuses it — it does not re-pull new commits on its own. New releases will not appear until you bust the cache:

# Re-fetch the default-branch HEAD and rebuild the cached environment
uvx --refresh --from git+https://github.com/TejGandham/parchmark-mcp parchmark-mcp
# …or just clear this package's cache so the next launch re-resolves
uv cache clean parchmark-mcp

Then restart your MCP client (Claude Code/Desktop, opencode) so it relaunches the server — a running client keeps the old process until restarted. See docs/INSTALL.md for details and the pip/uv pip equivalents.

Configuration

Environment Variables

Variable

Description

Example

PARCHMARK_URL

API base URL

https://parchmark.example.com/api

PARCHMARK_USERNAME

Your username

myuser

PARCHMARK_PASSWORD

Your password

mypassword

Claude Code Setup

claude mcp add parchmark -s user \
  -e "PARCHMARK_URL=https://your-instance/api" \
  -e "PARCHMARK_USERNAME=your-user" \
  -e "PARCHMARK_PASSWORD=your-pass" \
  -- uvx --from git+https://github.com/TejGandham/parchmark-mcp parchmark-mcp

Or manually add to .mcp.json:

{
  "mcpServers": {
    "parchmark": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/TejGandham/parchmark-mcp", "parchmark-mcp"],
      "env": {
        "PARCHMARK_URL": "https://parchmark.example.com/api",
        "PARCHMARK_USERNAME": "your-username",
        "PARCHMARK_PASSWORD": "your-password"
      }
    }
  }
}

Tools

Tool

Parameters

Description

list_notes

None

List all notes (metadata only)

get_note

note_id

Get a specific note with full content

create_note

content

Create a new note from markdown

update_note

note_id, content

Update an existing note

delete_note

note_id

Delete a note

Architecture

parchmark-mcp/
├── src/parchmark_mcp/
│   ├── __init__.py      # Package version
│   ├── server.py        # FastMCP server & tools
│   ├── client.py        # ParchMark API client
│   └── models.py        # Pydantic models
├── tests/
│   ├── test_models.py   # Model tests
│   ├── test_client.py   # Client tests (mocked)
│   └── test_server.py   # Server tests (mocked)
└── pyproject.toml       # Package config

Development

# Clone and install
git clone https://github.com/TejGandham/parchmark-mcp
cd parchmark-mcp
uv sync --all-extras

# Run tests
uv run pytest tests/ -v

# Lint & format
uv run ruff check src/ tests/
uv run ruff format src/ tests/

# Type check
uv run pyright src/ tests/

Quality Gates

Pre-commit hooks enforce:

  • ruff - Linting with autofix

  • ruff-format - Code formatting

  • pyright --strict - Type checking

Tech Stack

  • FastMCP - Python MCP framework

  • httpx - Async HTTP client

  • Pydantic - Data validation & models

  • pyright - Static type checking (strict mode)

  • ruff - Linting & formatting

  • pytest - Testing with async support

License

MIT

Available Tools

5 tools
create_noteA

Create a new note with markdown content.

The note title is automatically extracted from the first H1 heading.

Args: content: Markdown content for the note (should start with # Title)

Inputs: content (required). Returns: Full note including content.

delete_noteB

Delete a note by ID.

Args: note_id: The unique identifier of the note to delete

Inputs: note_id (required). Returns: Response for delete_note tool.

get_noteA

Get a specific note by ID with full content.

Args: note_id: The unique identifier of the note (e.g., "note-1234567890")

Inputs: note_id (required). Returns: Full note including content.

list_notesA

List all notes for the authenticated user.

Returns note metadata (id, title, timestamps) without content. Use get_note to retrieve full content for a specific note.

Inputs: no named parameters. Returns: Response for list_notes tool.

update_noteA

Update an existing note's content.

The note title is automatically re-extracted from the first H1 heading.

Args: note_id: The unique identifier of the note to update content: New markdown content for the note

Inputs: content (required), note_id (required). Returns: Full note including content.

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A4.2/5.0

    Scored across 5 tools

    Disambiguation5/5

    Each tool has a completely distinct role: listing metadata, retrieving full content, creating, updating, and deleting. No overlap or ambiguity exists.

    Naming Consistency5/5

    All tool names follow a strict verb_noun pattern (list_notes, get_note, create_note, update_note, delete_note), making the API highly predictable.

    Tool Count5/5

    With exactly 5 tools covering a notes CRUD lifecycle, the server is well-scoped without redundancy or excess.

    Completeness5/5

    The full CRUD cycle is present: list/get for reading, create, update, and delete. No essential operation for a notes domain is missing.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers