Back to the catalog

io.github.theduodecim/ascii-art

MCP server that exposes ASCII and Unicode art tools

Open source Open in the app JSON README (API)

About

MCP server that exposes ASCII and Unicode art tools

Details

Kind
MCP servers
Topic
No topic detected
Publisher
theduodecim
Origin
official
Category
ferramentas
Transport
local
Version
0.1.1
Stars
1
Last push
2026-03-10T15:34:59Z
Repository state
ativo
Language
HTML
License
NOASSERTION
Added
2026-08-29 04:01:32
Updated
2026-08-29 04:01:32
Origin id
io.github.theduodecim/ascii-art

README

# ascii-art-mcp

**ascii-art-mcp** is a **Model Context Protocol (MCP) server** built with **Node.js and TypeScript** that exposes tools for retrieving **ASCII and Unicode art** from a local database.

The server communicates using **stdio transport**, making it compatible with MCP clients such as:

- Claude Desktop
- Cursor
- LM Studio
- Open WebUI
- Other MCP-compatible environments
  
https://theduodecim.github.io/ascii-art-mcp/
---

# ▶ Run this MCP

Just drop this link into any MCP-compatible AI chat:

```
https://github.com/theduodecim/ascii-art-mcp/tree/main
```

> "Run this MCP"

The AI will clone the repo, build it, and run it automatically. No setup needed on your end.

---

# 📦 Installation

The package is available on npm:

https://www.npmjs.com/package/ascii-art-mcp

Install locally:

```bash
npm install ascii-art-mcp
```

Or run directly:

```bash
npx ascii-art-mcp
```

---

# 🌐 MCP Registry

This server is also published in the official **Model Context Protocol Registry**:

https://registry.modelcontextprotocol.io/?q=ascii-art

Server name:

```
io.github.theduodecim/ascii-art
```

This allows MCP-compatible tools to **discover and install it automatically**.

---

# ⚙️ Requirements

- Node.js **20+**
- npm

---

# 🚀 Running the server manually

Development mode:

```bash
npm run dev
```

Build + production run:

```bash
npm run build
npm start
```

The server uses **stdio transport** and loads its data from:

```
db.json
```

located in the repository root.

---

# 🧰 Available MCP Tools

## get_ascii_art

Finds an art entry by exact **nombre** or by an exact value in **aliases**.

### Input

| Field | Type | Required |
|------|------|------|
| query | string | yes |

### Output

Returns the entry's **art** field as plain text.

---

## search_ascii

Searches entries by **categoria**, **tags**, or both.

### Input

| Field | Type | Required |
|------|------|------|
| categoria | string | optional |
| tag | string | optional |

At least **one filter is required**.

### Output

Returns matching entries' **art fields combined as text output**.

---

## random_ascii

Returns a random entry from the database.

### Input

| Field | Type | Required |
|------|------|------|
| tipo | ascii \| unicode | required |

### Output

Returns the selected entry's **art field as plain text**.

---

## list_categories

Lists all unique categories present in the database.

### Input

None

### Output

Category names as **newline-separated text**.

---

# 🗂 Data Model

Entries in `db.json` follow the **AsciiArtEntry TypeScript interface**:

```
src/types/asciiArt.ts
```

Each entry contains metadata such as:

- name
- category
- tags
- aliases
- art content

---

# 🧪 Testing the MCP Server

A simple integration test was used to verify MCP communication using **JSON-RPC over stdio**.

Example test script (`test.mjs`):

```javascript
import { spawn } from "child_process";

const proc = spawn("node", ["dist/server.js"], {
  stdio: ["pipe", "pipe", "pipe"]
});

proc.stderr.on("data", (d) => {
  console.log("LOG:", d.toString());
});

proc.stdout.on("data", (d) => {
  console.log("SERVER:", d.toString());
});

function send(msg) {
  const json = JSON.stringify(msg);
  const payload = `Content-Length: ${Buffer.byteLength(json)}\r\n\r\n${json}\r\n`;

  console.log("\nSENDING:\n", json, "\n");

  proc.stdin.write(payload);
}

setTimeout(() => {
  send({
    jsonrpc: "2.0",
    id: 1,
    method: "initialize",
    params: {
      protocolVersion: "2024-11-05",
      capabilities: {},
      clientInfo: {
        name: "tester",
        version: "1.0"
      }
    }
  });
}, 500);

setTimeout(() => {
  send({
    jsonrpc: "2.0",
    method: "initialized",
    params: {}
  });
}, 1000);

setTimeout(() => {
  send({
    jsonrpc: "2.0",
    id: 2,
    method: "tools/list"
  });
}, 1500);

setTimeout(() => {
  proc.kill();
  console.log("TEST FINISHED");
}, 4000);
```

---

# 🧠 Architecture

```
src/
  server.ts
  tools/
  types/

dist/

db.json
```

- TypeScript MCP server
- JSON database (`db.json`)
- Zod validation for tool inputs
- stdio transport

---

# 🎯 Purpose

This project demonstrates how to build a simple **MCP tool server** that:

- runs locally
- requires **no API keys**
- exposes structured tools
- serves static data through MCP

---

# 📜 License

MIT

More