@openmark/mcp 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/openmarkClient.d.ts +30 -0
- package/dist/openmarkClient.d.ts.map +1 -0
- package/dist/openmarkClient.js +72 -0
- package/dist/openmarkClient.js.map +1 -0
- package/dist/tools.d.ts +10 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +49 -0
- package/dist/tools.js.map +1 -0
- package/package.json +38 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
4
|
+
import { OpenMarkClient } from './openmarkClient.js';
|
|
5
|
+
import { registerTools } from './tools.js';
|
|
6
|
+
const apiKey = process.env.OPENMARK_API_KEY;
|
|
7
|
+
if (!apiKey) {
|
|
8
|
+
process.stderr.write('Error: OPENMARK_API_KEY is required.\n');
|
|
9
|
+
process.stderr.write('Set it in your MCP server config: { "env": { "OPENMARK_API_KEY": "omk_..." } }\n');
|
|
10
|
+
process.exit(1);
|
|
11
|
+
}
|
|
12
|
+
const baseUrl = process.env.OPENMARK_BASE_URL ?? 'https://app.prathamesh.cloud';
|
|
13
|
+
const client = new OpenMarkClient({ apiKey, baseUrl });
|
|
14
|
+
const server = new McpServer({ name: 'openmark', version: '1.0.0' });
|
|
15
|
+
registerTools(server, client);
|
|
16
|
+
await server.connect(new StdioServerTransport());
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;AAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;IACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC/D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kFAAkF,CAAC,CAAC;IACzG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,8BAA8B,CAAC;AAEhF,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AACvD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;AAErE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9B,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface OpenMarkClientConfig {
|
|
2
|
+
apiKey: string;
|
|
3
|
+
baseUrl: string;
|
|
4
|
+
}
|
|
5
|
+
export interface CreatedDoc {
|
|
6
|
+
slug: string;
|
|
7
|
+
url: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ReadDoc {
|
|
10
|
+
slug: string;
|
|
11
|
+
title: string | null;
|
|
12
|
+
content: string;
|
|
13
|
+
url: string;
|
|
14
|
+
}
|
|
15
|
+
export interface UpdatedDoc {
|
|
16
|
+
slug: string;
|
|
17
|
+
url: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function extractSlug(input: string): string;
|
|
20
|
+
export declare class OpenMarkClient {
|
|
21
|
+
private readonly apiKey;
|
|
22
|
+
private readonly baseUrl;
|
|
23
|
+
constructor(config: OpenMarkClientConfig);
|
|
24
|
+
private authHeaders;
|
|
25
|
+
private docUrl;
|
|
26
|
+
createDoc(content: string, title?: string): Promise<CreatedDoc>;
|
|
27
|
+
readDoc(slugOrUrl: string): Promise<ReadDoc>;
|
|
28
|
+
updateDoc(slugOrUrl: string, content: string, title?: string): Promise<UpdatedDoc>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=openmarkClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openmarkClient.d.ts","sourceRoot":"","sources":["../src/openmarkClient.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CASjD;AAOD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,EAAE,oBAAoB;IAKxC,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,MAAM;IAIR,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAgB/D,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAY5C,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;CAgBzF"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
export function extractSlug(input) {
|
|
2
|
+
try {
|
|
3
|
+
const url = new URL(input);
|
|
4
|
+
const parts = url.pathname.split('/');
|
|
5
|
+
const last = parts[parts.length - 1];
|
|
6
|
+
return last || input;
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
return input;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
async function handleErrorResponse(res) {
|
|
13
|
+
const text = await res.text().catch(() => '');
|
|
14
|
+
throw new Error(`${res.status}: ${text}`);
|
|
15
|
+
}
|
|
16
|
+
export class OpenMarkClient {
|
|
17
|
+
apiKey;
|
|
18
|
+
baseUrl;
|
|
19
|
+
constructor(config) {
|
|
20
|
+
this.apiKey = config.apiKey;
|
|
21
|
+
this.baseUrl = config.baseUrl;
|
|
22
|
+
}
|
|
23
|
+
authHeaders() {
|
|
24
|
+
return {
|
|
25
|
+
'X-OpenMark-Key': this.apiKey,
|
|
26
|
+
'Content-Type': 'application/json',
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
docUrl(slug) {
|
|
30
|
+
return `${this.baseUrl}/d/${slug}`;
|
|
31
|
+
}
|
|
32
|
+
async createDoc(content, title) {
|
|
33
|
+
const body = { content };
|
|
34
|
+
if (title !== undefined)
|
|
35
|
+
body.title = title;
|
|
36
|
+
const res = await fetch(`${this.baseUrl}/api/docs`, {
|
|
37
|
+
method: 'POST',
|
|
38
|
+
headers: this.authHeaders(),
|
|
39
|
+
body: JSON.stringify(body),
|
|
40
|
+
});
|
|
41
|
+
if (!res.ok)
|
|
42
|
+
await handleErrorResponse(res);
|
|
43
|
+
const data = (await res.json());
|
|
44
|
+
return { slug: data.slug, url: this.docUrl(data.slug) };
|
|
45
|
+
}
|
|
46
|
+
async readDoc(slugOrUrl) {
|
|
47
|
+
const slug = extractSlug(slugOrUrl);
|
|
48
|
+
const res = await fetch(`${this.baseUrl}/api/docs/${encodeURIComponent(slug)}`, {
|
|
49
|
+
headers: { 'X-OpenMark-Key': this.apiKey },
|
|
50
|
+
});
|
|
51
|
+
if (!res.ok)
|
|
52
|
+
await handleErrorResponse(res);
|
|
53
|
+
const data = (await res.json());
|
|
54
|
+
return { slug: data.slug, title: data.title, content: data.content, url: this.docUrl(data.slug) };
|
|
55
|
+
}
|
|
56
|
+
async updateDoc(slugOrUrl, content, title) {
|
|
57
|
+
const slug = extractSlug(slugOrUrl);
|
|
58
|
+
const body = { content };
|
|
59
|
+
if (title !== undefined)
|
|
60
|
+
body.title = title;
|
|
61
|
+
const res = await fetch(`${this.baseUrl}/api/docs/${encodeURIComponent(slug)}`, {
|
|
62
|
+
method: 'PUT',
|
|
63
|
+
headers: this.authHeaders(),
|
|
64
|
+
body: JSON.stringify(body),
|
|
65
|
+
});
|
|
66
|
+
if (!res.ok)
|
|
67
|
+
await handleErrorResponse(res);
|
|
68
|
+
const data = (await res.json());
|
|
69
|
+
return { slug: data.slug, url: this.docUrl(data.slug) };
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=openmarkClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openmarkClient.js","sourceRoot":"","sources":["../src/openmarkClient.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import type { OpenMarkClient } from './openmarkClient.js';
|
|
3
|
+
export interface ToolHandlers {
|
|
4
|
+
openmark_create_doc: (args: Record<string, unknown>) => Promise<string>;
|
|
5
|
+
openmark_read_doc: (args: Record<string, unknown>) => Promise<string>;
|
|
6
|
+
openmark_update_doc: (args: Record<string, unknown>) => Promise<string>;
|
|
7
|
+
}
|
|
8
|
+
export declare function buildToolHandlers(client: OpenMarkClient): ToolHandlers;
|
|
9
|
+
export declare function registerTools(server: McpServer, client: OpenMarkClient): void;
|
|
10
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAiB1D,MAAM,WAAW,YAAY;IAC3B,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACxE,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACtE,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACzE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,YAAY,CAyBtE;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CA6B7E"}
|
package/dist/tools.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
const createDocSchema = z.object({
|
|
3
|
+
content: z.string().min(1, 'content is required'),
|
|
4
|
+
title: z.string().max(300).optional(),
|
|
5
|
+
});
|
|
6
|
+
const readDocSchema = z.object({
|
|
7
|
+
slug: z.string().min(1, 'slug is required'),
|
|
8
|
+
});
|
|
9
|
+
const updateDocSchema = z.object({
|
|
10
|
+
slug: z.string().min(1, 'slug is required'),
|
|
11
|
+
content: z.string().min(1, 'content is required'),
|
|
12
|
+
title: z.string().max(300).optional(),
|
|
13
|
+
});
|
|
14
|
+
export function buildToolHandlers(client) {
|
|
15
|
+
async function openmark_create_doc(args) {
|
|
16
|
+
const { content, title } = createDocSchema.parse(args);
|
|
17
|
+
const result = await client.createDoc(content, title);
|
|
18
|
+
return `Created: ${result.url}`;
|
|
19
|
+
}
|
|
20
|
+
async function openmark_read_doc(args) {
|
|
21
|
+
const { slug } = readDocSchema.parse(args);
|
|
22
|
+
const doc = await client.readDoc(slug);
|
|
23
|
+
return [
|
|
24
|
+
doc.title ? `Title: ${doc.title}` : 'Title: (untitled)',
|
|
25
|
+
`URL: ${doc.url}`,
|
|
26
|
+
'',
|
|
27
|
+
doc.content,
|
|
28
|
+
].join('\n');
|
|
29
|
+
}
|
|
30
|
+
async function openmark_update_doc(args) {
|
|
31
|
+
const { slug, content, title } = updateDocSchema.parse(args);
|
|
32
|
+
const result = await client.updateDoc(slug, content, title);
|
|
33
|
+
return `Updated: ${result.url}`;
|
|
34
|
+
}
|
|
35
|
+
return { openmark_create_doc, openmark_read_doc, openmark_update_doc };
|
|
36
|
+
}
|
|
37
|
+
export function registerTools(server, client) {
|
|
38
|
+
const handlers = buildToolHandlers(client);
|
|
39
|
+
server.tool('openmark_create_doc', 'Create a new markdown document in openmark and return its shareable URL.', { content: z.string().describe('Markdown content (max 500 KB)'), title: z.string().max(300).optional().describe('Optional document title') }, async ({ content, title }) => ({
|
|
40
|
+
content: [{ type: 'text', text: await handlers.openmark_create_doc({ content, title }) }],
|
|
41
|
+
}));
|
|
42
|
+
server.tool('openmark_read_doc', 'Read a document\'s content from openmark by slug or URL.', { slug: z.string().describe('The 7-char slug or full openmark URL') }, async ({ slug }) => ({
|
|
43
|
+
content: [{ type: 'text', text: await handlers.openmark_read_doc({ slug }) }],
|
|
44
|
+
}));
|
|
45
|
+
server.tool('openmark_update_doc', 'Replace the content of an existing openmark document you own.', { slug: z.string().describe('The 7-char slug or full openmark URL'), content: z.string().describe('New markdown content'), title: z.string().max(300).optional().describe('New title (omit to leave unchanged)') }, async ({ slug, content, title }) => ({
|
|
46
|
+
content: [{ type: 'text', text: await handlers.openmark_update_doc({ slug, content, title }) }],
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@openmark/mcp",
|
|
3
|
+
"version": "1.0.3",
|
|
4
|
+
"description": "MCP server for openmark — lets AI coding agents create, read, and update markdown documents",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"openmark-mcp": "./dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"test": "vitest run",
|
|
13
|
+
"test:watch": "vitest"
|
|
14
|
+
},
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@modelcontextprotocol/sdk": "^1.0.0"
|
|
17
|
+
},
|
|
18
|
+
"devDependencies": {
|
|
19
|
+
"@types/node": "^22.0.0",
|
|
20
|
+
"typescript": "^5.6.3",
|
|
21
|
+
"vitest": "^2.1.4"
|
|
22
|
+
},
|
|
23
|
+
"engines": {
|
|
24
|
+
"node": ">=18"
|
|
25
|
+
},
|
|
26
|
+
"files": [
|
|
27
|
+
"dist"
|
|
28
|
+
],
|
|
29
|
+
"keywords": [
|
|
30
|
+
"mcp",
|
|
31
|
+
"openmark",
|
|
32
|
+
"markdown",
|
|
33
|
+
"claude",
|
|
34
|
+
"cursor",
|
|
35
|
+
"ai"
|
|
36
|
+
],
|
|
37
|
+
"license": "MIT"
|
|
38
|
+
}
|