@rynko/mcp-server 1.0.3 → 1.0.5
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 +25 -4
- package/dist/index.js +42 -29
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@ Rynko MCP server for Claude Desktop - manage templates and generate documents th
|
|
|
10
10
|
|
|
11
11
|
Or install from the `.mcpb` bundle:
|
|
12
12
|
|
|
13
|
-
1. Download `rynko-mcp-{version}.mcpb` from the [releases page](https://github.com/rynko/
|
|
13
|
+
1. Download `rynko-mcp-{version}.mcpb` from the [releases page](https://github.com/rynko-dev/mcp-server/releases)
|
|
14
14
|
2. In Claude Desktop, go to **Settings** → **Extensions**
|
|
15
15
|
3. Click **Install from file** and select the downloaded `.mcpb` file
|
|
16
16
|
4. Enter your Personal Access Token when prompted
|
|
@@ -98,10 +98,25 @@ Close and reopen Claude Desktop. You should see "rynko" in your available MCP se
|
|
|
98
98
|
|
|
99
99
|
| Tool | Description |
|
|
100
100
|
|------|-------------|
|
|
101
|
-
| `preview_template` | Generate a preview document |
|
|
102
|
-
| `generate_document` | Generate a production document |
|
|
101
|
+
| `preview_template` | Generate a preview document (free, no credits used) |
|
|
102
|
+
| `generate_document` | Generate a production document (uses credits) |
|
|
103
103
|
| `get_job_status` | Check document generation status |
|
|
104
104
|
|
|
105
|
+
#### generate_document Parameters
|
|
106
|
+
|
|
107
|
+
| Parameter | Required | Description |
|
|
108
|
+
|-----------|----------|-------------|
|
|
109
|
+
| `workspace_id` | Yes | The workspace ID |
|
|
110
|
+
| `template_id` | Yes | The template ID to generate from |
|
|
111
|
+
| `variables` | Yes | Variable values for the document |
|
|
112
|
+
| `format` | No | Output format: `pdf` (default) or `excel` |
|
|
113
|
+
| `filename` | No | Custom filename (without extension) |
|
|
114
|
+
| `use_draft` | No | Use draft version instead of published (default: false) |
|
|
115
|
+
| `use_credits` | No | Use premium credits to generate without watermark (default: false) |
|
|
116
|
+
| `metadata` | No | Custom key-value metadata for the document job |
|
|
117
|
+
|
|
118
|
+
**Note on Watermarks:** Free tier documents include a watermark. Set `use_credits: true` to generate watermark-free documents using your purchased premium credits.
|
|
119
|
+
|
|
105
120
|
## Example Usage
|
|
106
121
|
|
|
107
122
|
Once configured, you can have natural conversations with Claude:
|
|
@@ -118,6 +133,12 @@ Once configured, you can have natural conversations with Claude:
|
|
|
118
133
|
>
|
|
119
134
|
> *[Generates PDF using your template]*
|
|
120
135
|
|
|
136
|
+
> **You:** Generate a professional invoice without watermark for my client presentation.
|
|
137
|
+
>
|
|
138
|
+
> **Claude:** I'll generate a watermark-free invoice using your premium credits...
|
|
139
|
+
>
|
|
140
|
+
> *[Generates PDF with use_credits: true]*
|
|
141
|
+
|
|
121
142
|
## Environment Variables
|
|
122
143
|
|
|
123
144
|
| Variable | Required | Description |
|
|
@@ -161,7 +182,7 @@ Once configured, you can have natural conversations with Claude:
|
|
|
161
182
|
## Support
|
|
162
183
|
|
|
163
184
|
- **Email**: support@rynko.dev
|
|
164
|
-
- **Issues**: [GitHub Issues](https://github.com/rynko/
|
|
185
|
+
- **Issues**: [GitHub Issues](https://github.com/rynko-dev/mcp-server/issues)
|
|
165
186
|
|
|
166
187
|
## Building from Source
|
|
167
188
|
|
package/dist/index.js
CHANGED
|
@@ -28,21 +28,25 @@ const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
|
|
|
28
28
|
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
29
29
|
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
30
30
|
const client_js_1 = require("./client.js");
|
|
31
|
+
// Log to stderr so it appears in Claude Desktop logs
|
|
32
|
+
function log(message) {
|
|
33
|
+
console.error(`[rynko-mcp] ${message}`);
|
|
34
|
+
}
|
|
31
35
|
// Get configuration from environment
|
|
32
36
|
const RYNKO_USER_TOKEN = process.env.RYNKO_USER_TOKEN;
|
|
33
37
|
const RYNKO_API_URL = process.env.RYNKO_API_URL;
|
|
38
|
+
log(`Starting Rynko MCP Server...`);
|
|
39
|
+
log(`Token present: ${!!RYNKO_USER_TOKEN}`);
|
|
40
|
+
log(`API URL: ${RYNKO_API_URL || 'https://api.rynko.dev/api (default)'}`);
|
|
34
41
|
// Validate token
|
|
35
42
|
if (!RYNKO_USER_TOKEN) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
console.error(' Settings → Personal Access Tokens → Create Token');
|
|
40
|
-
console.error('');
|
|
41
|
-
console.error('Then set it in your environment or Claude Desktop config.');
|
|
43
|
+
log('ERROR: RYNKO_USER_TOKEN environment variable is required');
|
|
44
|
+
log('Get a Personal Access Token from your Rynko dashboard:');
|
|
45
|
+
log(' Settings → Personal Access Tokens → Create Token');
|
|
42
46
|
process.exit(1);
|
|
43
47
|
}
|
|
44
48
|
if (!RYNKO_USER_TOKEN.startsWith('pat_')) {
|
|
45
|
-
|
|
49
|
+
log('ERROR: Invalid token format. Token must start with "pat_"');
|
|
46
50
|
process.exit(1);
|
|
47
51
|
}
|
|
48
52
|
// Initialize API client
|
|
@@ -50,18 +54,21 @@ const client = new client_js_1.RynkoClient(RYNKO_USER_TOKEN, RYNKO_API_URL);
|
|
|
50
54
|
// Create MCP server
|
|
51
55
|
const server = new index_js_1.Server({
|
|
52
56
|
name: 'rynko-mcp',
|
|
53
|
-
version: '1.0.
|
|
57
|
+
version: '1.0.5',
|
|
54
58
|
}, {
|
|
55
59
|
capabilities: {
|
|
56
60
|
tools: {},
|
|
57
61
|
},
|
|
58
62
|
});
|
|
63
|
+
log('Server instance created');
|
|
59
64
|
/**
|
|
60
65
|
* Handle list tools request
|
|
61
66
|
*/
|
|
62
67
|
server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
|
|
68
|
+
log('Handling ListTools request');
|
|
63
69
|
try {
|
|
64
70
|
const { tools } = await client.listTools();
|
|
71
|
+
log(`Returning ${tools.length} tools`);
|
|
65
72
|
return {
|
|
66
73
|
tools: tools.map((tool) => ({
|
|
67
74
|
name: tool.name,
|
|
@@ -72,6 +79,7 @@ server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
|
|
|
72
79
|
}
|
|
73
80
|
catch (error) {
|
|
74
81
|
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
82
|
+
log(`ERROR in ListTools: ${message}`);
|
|
75
83
|
throw new types_js_1.McpError(types_js_1.ErrorCode.InternalError, `Failed to list tools: ${message}`);
|
|
76
84
|
}
|
|
77
85
|
});
|
|
@@ -80,8 +88,10 @@ server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
|
|
|
80
88
|
*/
|
|
81
89
|
server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
82
90
|
const { name, arguments: args } = request.params;
|
|
91
|
+
log(`Handling CallTool request: ${name}`);
|
|
83
92
|
try {
|
|
84
93
|
const result = await client.callTool(name, args || {});
|
|
94
|
+
log(`Tool ${name} completed successfully`);
|
|
85
95
|
// Convert response to MCP format
|
|
86
96
|
return {
|
|
87
97
|
content: result.content.map((item) => {
|
|
@@ -109,6 +119,7 @@ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
|
109
119
|
}
|
|
110
120
|
catch (error) {
|
|
111
121
|
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
122
|
+
log(`ERROR in CallTool ${name}: ${message}`);
|
|
112
123
|
return {
|
|
113
124
|
content: [
|
|
114
125
|
{
|
|
@@ -124,35 +135,37 @@ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
|
124
135
|
* Main entry point
|
|
125
136
|
*/
|
|
126
137
|
async function main() {
|
|
127
|
-
|
|
138
|
+
log('Starting main()...');
|
|
128
139
|
try {
|
|
129
|
-
|
|
140
|
+
// Start the server with stdio transport immediately
|
|
141
|
+
// Don't verify API connection upfront - let it fail gracefully when tools are called
|
|
142
|
+
const transport = new stdio_js_1.StdioServerTransport();
|
|
143
|
+
log('Transport created, connecting...');
|
|
144
|
+
await server.connect(transport);
|
|
145
|
+
log('Server connected to transport successfully');
|
|
146
|
+
// Handle graceful shutdown
|
|
147
|
+
process.on('SIGINT', async () => {
|
|
148
|
+
log('Received SIGINT, shutting down...');
|
|
149
|
+
await server.close();
|
|
150
|
+
process.exit(0);
|
|
151
|
+
});
|
|
152
|
+
process.on('SIGTERM', async () => {
|
|
153
|
+
log('Received SIGTERM, shutting down...');
|
|
154
|
+
await server.close();
|
|
155
|
+
process.exit(0);
|
|
156
|
+
});
|
|
130
157
|
}
|
|
131
158
|
catch (error) {
|
|
132
159
|
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
console.error(' 2. You have network connectivity');
|
|
138
|
-
console.error(' 3. The Rynko API is accessible');
|
|
160
|
+
log(`FATAL ERROR in main(): ${message}`);
|
|
161
|
+
if (error instanceof Error && error.stack) {
|
|
162
|
+
log(error.stack);
|
|
163
|
+
}
|
|
139
164
|
process.exit(1);
|
|
140
165
|
}
|
|
141
|
-
// Start the server with stdio transport
|
|
142
|
-
const transport = new stdio_js_1.StdioServerTransport();
|
|
143
|
-
await server.connect(transport);
|
|
144
|
-
// Handle graceful shutdown
|
|
145
|
-
process.on('SIGINT', async () => {
|
|
146
|
-
await server.close();
|
|
147
|
-
process.exit(0);
|
|
148
|
-
});
|
|
149
|
-
process.on('SIGTERM', async () => {
|
|
150
|
-
await server.close();
|
|
151
|
-
process.exit(0);
|
|
152
|
-
});
|
|
153
166
|
}
|
|
154
167
|
main().catch((error) => {
|
|
155
|
-
|
|
168
|
+
log(`FATAL: Unhandled error: ${error}`);
|
|
156
169
|
process.exit(1);
|
|
157
170
|
});
|
|
158
171
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAEA;;;;;;;;;;;;;;;;;;;;;;GAsBG;;AAEH,wEAAmE;AACnE,wEAAiF;AACjF,iEAK4C;AAC5C,2CAA0C;AAE1C,qCAAqC;AACrC,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;AACtD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;AAEhD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rynko/mcp-server",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"description": "Rynko MCP server for Claude Desktop - manage templates and generate documents through natural conversation",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
7
|
-
"rynko-mcp": "
|
|
7
|
+
"rynko-mcp": "dist/index.js"
|
|
8
8
|
},
|
|
9
9
|
"types": "dist/index.d.ts",
|
|
10
10
|
"files": [
|