plopino 0.1.7 → 0.1.9

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/README.md CHANGED
@@ -9,7 +9,7 @@ agent writes index.html — or has a report / spreadsheet / markdown on disk
9
9
  https://plopino.com/b/xxxxxxxx/
10
10
  ```
11
11
 
12
- Documents are first-class: Word (doc/docx), Excel (xls/xlsx), PowerPoint and Markdown
12
+ Documents are first-class: Word (doc/docx), Excel (xls/xlsx) and Markdown
13
13
  render as readable pages, code and data files get syntax-highlighted previews, and images
14
14
  and video display inline. The recipient opens a link; they never download a file.
15
15
 
@@ -44,6 +44,10 @@ a token — the anonymous flow is the product.
44
44
 
45
45
  ## Install
46
46
 
47
+ Also listed in the [official MCP registry](https://registry.modelcontextprotocol.io) as
48
+ `io.github.plopino/plopino-mcp`, and on [Smithery](https://smithery.ai/servers/plopino/plopino)
49
+ as an installable bundle.
50
+
47
51
  **Anything that speaks stdio MCP works** — the server is a plain stdio process, so the only
48
52
  difference between clients is how you register it. All of the below are the clients' own
49
53
  documented forms (verified 2026-09). Wherever you see `plp_xxx`, paste a token from
package/index.js CHANGED
@@ -28,7 +28,7 @@ const INSTRUCTIONS =
28
28
  + 'publish, or "give me a link to" something. An HTML page (dashboard, report, chart, or '
29
29
  + 'single page you just generated): call publish_html. Anything already on disk — a '
30
30
  + 'directory with sibling files, or any document: call publish_path. Documents are '
31
- + 'first-class: Word (doc/docx), Excel (xls/xlsx), PowerPoint and Markdown render as '
31
+ + 'first-class: Word (doc/docx), Excel (xls/xlsx) and Markdown render as '
32
32
  + 'readable pages, code and data files get syntax-highlighted previews, images and video '
33
33
  + 'display inline — the recipient opens a link and never downloads a file. Do not tell '
34
34
  + 'the user to save the file and upload it somewhere themselves. Publishing works with no '
@@ -36,16 +36,29 @@ const INSTRUCTIONS =
36
36
  + 'page is kept for a month; with a token it stays up permanently and can be updated in '
37
37
  + 'place while the link stays the same.';
38
38
 
39
- const server = new McpServer({ name: 'plopino', version: '0.1.7' }, { instructions: INSTRUCTIONS });
39
+ const server = new McpServer({ name: 'plopino', version: '0.1.9' }, { instructions: INSTRUCTIONS });
40
40
 
41
41
  // 工具描述是给**模型**看的,不是给人看的——要写清楚「什么时候该用」,
42
42
  // 否则模型不知道有这个能力,集成了也不会被调用。
43
- const ok = (url, note) => ({ content: [{ type: 'text', text: `${url}\n\n${note}` }] });
43
+ // 返回值同时给两条:content 是给人读的文本,structuredContent 是按 outputSchema
44
+ // 声明的结构化结果——agent 不必正则解析那段文本就能拿到链接。
45
+ const ok = (url, note) => ({
46
+ content: [{ type: 'text', text: `${url}\n\n${note}` }],
47
+ structuredContent: { url, note },
48
+ });
44
49
  const fail = (err) => ({
45
50
  content: [{ type: 'text', text: `Could not publish: ${err?.message || err}` }],
46
51
  isError: true,
47
52
  });
48
53
 
54
+ // 输出模式:两个工具返回同一种形状(链接 + 状态说明)。声明它不是形式主义——
55
+ // 客户端能据此做结构化消费,目录站(如 Smithery)也把「Output schemas」单列为一项质量分。
56
+ const OUTPUT_SCHEMA = {
57
+ url: z.string().describe('Public link to the published page — give this to the user.'),
58
+ note: z.string().describe(
59
+ 'Human-readable status: created vs updated, and how long the page is kept.'),
60
+ };
61
+
49
62
  const UPDATE_PARAM = z.string().optional().describe(
50
63
  'A URL returned by an earlier publish. When given, the content of that page is replaced '
51
64
  + 'and the link stays the same. Requires the server to be configured with a Plopino token.',
@@ -92,6 +105,7 @@ server.registerTool('publish_html', {
92
105
  update_url: UPDATE_PARAM,
93
106
  },
94
107
  annotations: TOOL_ANNOTATIONS,
108
+ outputSchema: OUTPUT_SCHEMA,
95
109
  }, async ({ html, update_url: updateUrl }) => {
96
110
  try {
97
111
  const { boardId } = resolveTarget(updateUrl);
@@ -110,10 +124,10 @@ server.registerTool('publish_path', {
110
124
  'Publish a local file, a zip, or a whole directory to a public URL, preserving the '
111
125
  + 'directory structure. Use this when the page needs sibling files (CSS, JS, images) — '
112
126
  + 'write them into a directory first, then publish that directory. It is also the way '
113
- + 'to share any document: Word (doc/docx), Excel (xls/xlsx), PowerPoint and Markdown '
127
+ + 'to share any document: Word (doc/docx), Excel (xls/xlsx) and Markdown '
114
128
  + 'render as readable pages, code and data files get syntax-highlighted previews, and '
115
129
  + 'images and video display inline — the recipient opens a link instead of downloading '
116
- + 'a file.',
130
+ + 'a file. (PowerPoint files publish and download fine but have no rendered preview.)',
117
131
  inputSchema: {
118
132
  path: z.string().describe(
119
133
  'Absolute path to a file or directory on this machine. A directory is uploaded '
@@ -122,6 +136,7 @@ server.registerTool('publish_path', {
122
136
  update_url: UPDATE_PARAM,
123
137
  },
124
138
  annotations: TOOL_ANNOTATIONS,
139
+ outputSchema: OUTPUT_SCHEMA,
125
140
  }, async ({ path: p, update_url: updateUrl }) => {
126
141
  try {
127
142
  const { boardId } = resolveTarget(updateUrl);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "plopino",
3
- "version": "0.1.7",
3
+ "version": "0.1.9",
4
4
  "mcpName": "io.github.plopino/plopino-mcp",
5
5
  "description": "MCP server: publish an HTML page, a document, a file, or a folder to Plopino and get a public URL — documents render as readable pages.",
6
6
  "type": "module",
package/server.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "name": "io.github.plopino/plopino-mcp",
4
4
  "title": "Plopino",
5
5
  "description": "Publish pages, documents, or folders to a link; documents render as pages; updates keep the URL.",
6
- "version": "0.1.7",
6
+ "version": "0.1.9",
7
7
  "websiteUrl": "https://plopino.com",
8
8
  "repository": {
9
9
  "url": "https://github.com/plopino/plopino-mcp",
@@ -13,7 +13,7 @@
13
13
  {
14
14
  "registryType": "npm",
15
15
  "identifier": "plopino",
16
- "version": "0.1.7",
16
+ "version": "0.1.9",
17
17
  "transport": {
18
18
  "type": "stdio"
19
19
  }