Skip to main content
Glama
lontar-mcp

lontar-mcp

Moved. This GitHub copy is an archive. Use the Forgejo repository.

Canonical repository: https://git.simonharms.com/thesimonharms/lontar-mcp

lontar-mcp

MCP server that gives AI agents full blog management over a Lontar headless blogging API — list and read published posts, draft new content, publish, update, and delete.

Lontar is a Laravel package; this server talks to its HTTP API so agents can manage a blog without touching the CMS UI.

Tools

Tool

Auth

Description

list_posts

No

List published posts (paginated)

get_post

No

Get a published post by slug, including rendered HTML body

list_drafts

Yes

List draft posts (paginated)

create_post

Yes

Create a new post (draft by default)

update_post

Yes

Update an existing post by slug

delete_post

Yes

Permanently delete a post

publish_post

Yes

Publish a draft (sets published_at to now)

unpublish_post

Yes

Unpublish a post (clears published_at)

list_posts / list_drafts

Parameter

Type

Default

Description

page

number

1

Page number

get_post

Parameter

Type

Description

slug

string

Post slug

create_post

Parameter

Type

Default

Description

title

string

—

Post title (slug auto-generated)

body

string

—

Post body (Markdown)

excerpt

string

—

Short excerpt

published_at

string

—

ISO 8601 date; omit to save as draft

update_post

Parameter

Type

Description

slug

string

Current post slug

title

string

New title (regenerates slug)

body

string

New body (Markdown)

excerpt

string | null

New excerpt

published_at

string | null

New publish date, or null to unpublish

delete_post / publish_post / unpublish_post

Parameter

Type

Description

slug

string

Post slug

All tool responses are JSON strings in the MCP text content field.

Related MCP server: Ghost MCP

Install

npm install lontar-mcp

Or clone and build locally:

git clone https://github.com/thesimonharms/lontar-mcp.git
cd lontar-mcp
npm install
npm run build

Requires Node.js 18+.

Environment variables

Variable

Required

Description

LONTAR_API_URL

Yes

API base URL, e.g. https://example.com/api

LONTAR_API_TOKEN

For write ops

Laravel Sanctum bearer token

MCP configuration

Cursor / Claude Desktop

{
  "mcpServers": {
    "lontar": {
      "command": "node",
      "args": ["C:/absolute/path/to/lontar-mcp/dist/index.js"],
      "env": {
        "LONTAR_API_URL": "https://your-blog.example.com/api",
        "LONTAR_API_TOKEN": "your-sanctum-token"
      }
    }
  }
}

If installed globally or via npx:

{
  "mcpServers": {
    "lontar": {
      "command": "npx",
      "args": ["lontar-mcp"],
      "env": {
        "LONTAR_API_URL": "https://your-blog.example.com/api",
        "LONTAR_API_TOKEN": "your-sanctum-token"
      }
    }
  }
}

Examples

List published posts

{ "page": 1 }

Get a post

{ "slug": "hello-world" }

Create a draft

{
  "title": "My New Post",
  "body": "# Hello\n\nMarkdown content here.",
  "excerpt": "A short summary"
}

Publish a draft

{ "slug": "my-new-post" }

Development

npm run build   # bundle server to dist/
npm start       # run on stdio
npm test        # build + run cobasaja tests

Tests live in tests/ and use cobasaja to spawn the server over stdio against an in-memory mock API, asserting tool behaviour end-to-end.

License

MIT © Simon Harms

Available Tools

8 tools
create_postA

Create a new blog post. Requires LONTAR_API_TOKEN. Slug is auto-generated from the title. Omit published_at to create a draft.

Inputs: title (required), body (required), excerpt, published_at.

delete_postA

Permanently delete a post by slug. Requires LONTAR_API_TOKEN.

Inputs: slug (required).

get_postA

Get a single published post by slug. Returns full post data including body and rendered_body (HTML).

Inputs: slug (required).

list_draftsA

List draft posts (paginated). Requires LONTAR_API_TOKEN. Returns title, slug, excerpt, and created_at.

Inputs: page.

list_postsA

List published blog posts (paginated). Returns title, slug, excerpt, and published_at for each post.

Inputs: page.

publish_postB

Publish a draft post by setting published_at to now. Requires LONTAR_API_TOKEN.

Inputs: slug (required).

unpublish_postA

Unpublish a post by clearing published_at. Requires LONTAR_API_TOKEN.

Inputs: slug (required).

update_postA

Update an existing post by slug. Requires LONTAR_API_TOKEN. Only provided fields are changed.

Inputs: slug (required), title, body, excerpt, +1 more.

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A4/5.0

    Scored across 8 tools

    Disambiguation5/5

    Each tool targets a distinct action on posts or drafts: create, delete, get, list drafts, list published, publish, unpublish, update. No overlapping purposes.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern (e.g., create_post, list_drafts, publish_post), making predictions easy.

    Tool Count5/5

    8 tools cover the core blog post lifecycle without being excessive or too sparse. Each tool serves a clear role.

    Completeness4/5

    Covers full CRUD plus draft/publish state management. Minor gap: no search or filtering tools, but core workflow is complete.

    Maintenance

    ActivityStale
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers