opencode-puter-auth 1.0.60 → 1.1.0
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 +86 -0
- package/dist/cli.d.ts +5 -4
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +43 -12
- package/dist/cli.js.map +1 -1
- package/dist/mcp-server.d.ts +27 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +334 -0
- package/dist/mcp-server.js.map +1 -0
- package/package.json +9 -3
package/README.md
CHANGED
|
@@ -314,6 +314,92 @@ You can use ANY model from [OpenRouter's catalog](https://openrouter.ai/models)
|
|
|
314
314
|
|
|
315
315
|
Note: Non-free models will consume your Puter credits based on OpenRouter pricing.
|
|
316
316
|
|
|
317
|
+
## MCP Server Mode (Zed IDE, Claude Desktop, etc.)
|
|
318
|
+
|
|
319
|
+
This plugin includes a built-in MCP (Model Context Protocol) server, allowing you to use Puter AI models in any MCP-compatible application like **Zed IDE**, **Claude Desktop**, **Continue**, and more.
|
|
320
|
+
|
|
321
|
+
### Quick Setup
|
|
322
|
+
|
|
323
|
+
1. **Authenticate with Puter first:**
|
|
324
|
+
|
|
325
|
+
```bash
|
|
326
|
+
npx opencode-puter-auth login
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
2. **Add to your MCP client configuration:**
|
|
330
|
+
|
|
331
|
+
**For Zed IDE** (`~/.config/zed/settings.json`):
|
|
332
|
+
|
|
333
|
+
```json
|
|
334
|
+
{
|
|
335
|
+
"context_servers": {
|
|
336
|
+
"puter": {
|
|
337
|
+
"command": {
|
|
338
|
+
"path": "npx",
|
|
339
|
+
"args": ["opencode-puter-auth", "serve", "--mcp"]
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
**For Claude Desktop** (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
|
|
347
|
+
|
|
348
|
+
```json
|
|
349
|
+
{
|
|
350
|
+
"mcpServers": {
|
|
351
|
+
"puter": {
|
|
352
|
+
"command": "npx",
|
|
353
|
+
"args": ["opencode-puter-auth", "serve", "--mcp"]
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
**For other MCP clients**, use the command:
|
|
360
|
+
```bash
|
|
361
|
+
npx opencode-puter-auth serve --mcp
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
Or if installed globally:
|
|
365
|
+
```bash
|
|
366
|
+
puter-mcp
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
### Available MCP Tools
|
|
370
|
+
|
|
371
|
+
After setup, you'll have access to these tools:
|
|
372
|
+
|
|
373
|
+
| Tool | Description |
|
|
374
|
+
|------|-------------|
|
|
375
|
+
| **puter-chat** | Chat with 500+ AI models (Claude, GPT, Gemini, etc.). Supports system prompts, temperature, and max_tokens. |
|
|
376
|
+
| **puter-models** | List all available AI models. Filter by provider (anthropic, openai, google). |
|
|
377
|
+
| **puter-account** | Show account info including username and remaining credits. |
|
|
378
|
+
|
|
379
|
+
### Example Usage in Zed
|
|
380
|
+
|
|
381
|
+
Once configured, you can use the tools in Zed's Agent Panel:
|
|
382
|
+
|
|
383
|
+
```
|
|
384
|
+
Use puter-chat to ask Claude Opus 4.5 to explain this code
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
```
|
|
388
|
+
Use puter-models to list all available Anthropic models
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
```
|
|
392
|
+
Use puter-account to check my remaining credits
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
### Why Use Puter MCP?
|
|
396
|
+
|
|
397
|
+
- **500+ AI Models** - Access Claude Opus 4.5, GPT-5.2, Gemini 2.5 Pro, DeepSeek R1, and more
|
|
398
|
+
- **No API Keys** - Just sign in with your Puter account
|
|
399
|
+
- **Free Tier** - Try before you buy with Puter's free credits
|
|
400
|
+
- **400+ FREE OpenRouter Models** - Use `:free` models with no cost
|
|
401
|
+
- **Works Everywhere** - Any MCP-compatible client (Zed, Claude Desktop, Continue, etc.)
|
|
402
|
+
|
|
317
403
|
## AI SDK Provider (Standalone Usage)
|
|
318
404
|
|
|
319
405
|
You can also use the Puter AI SDK provider directly in your own applications:
|
package/dist/cli.d.ts
CHANGED
|
@@ -5,10 +5,11 @@
|
|
|
5
5
|
* Provides command-line authentication management for the Puter.com provider.
|
|
6
6
|
*
|
|
7
7
|
* Usage:
|
|
8
|
-
* puter-auth login
|
|
9
|
-
* puter-auth logout
|
|
10
|
-
* puter-auth status
|
|
11
|
-
* puter-auth --
|
|
8
|
+
* puter-auth login - Authenticate with Puter.com
|
|
9
|
+
* puter-auth logout - Remove all stored credentials
|
|
10
|
+
* puter-auth status - Show current authentication status
|
|
11
|
+
* puter-auth serve --mcp - Start MCP server for Zed/Claude Desktop
|
|
12
|
+
* puter-auth --help - Show this help message
|
|
12
13
|
*/
|
|
13
14
|
export {};
|
|
14
15
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG"}
|
package/dist/cli.js
CHANGED
|
@@ -5,10 +5,11 @@
|
|
|
5
5
|
* Provides command-line authentication management for the Puter.com provider.
|
|
6
6
|
*
|
|
7
7
|
* Usage:
|
|
8
|
-
* puter-auth login
|
|
9
|
-
* puter-auth logout
|
|
10
|
-
* puter-auth status
|
|
11
|
-
* puter-auth --
|
|
8
|
+
* puter-auth login - Authenticate with Puter.com
|
|
9
|
+
* puter-auth logout - Remove all stored credentials
|
|
10
|
+
* puter-auth status - Show current authentication status
|
|
11
|
+
* puter-auth serve --mcp - Start MCP server for Zed/Claude Desktop
|
|
12
|
+
* puter-auth --help - Show this help message
|
|
12
13
|
*/
|
|
13
14
|
import { createPuterAuthManager } from './auth.js';
|
|
14
15
|
import { homedir } from 'os';
|
|
@@ -18,23 +19,39 @@ const HELP = `
|
|
|
18
19
|
puter-auth - Puter.com Authentication for OpenCode
|
|
19
20
|
|
|
20
21
|
USAGE:
|
|
21
|
-
puter-auth <command>
|
|
22
|
+
puter-auth <command> [options]
|
|
22
23
|
|
|
23
24
|
COMMANDS:
|
|
24
|
-
login
|
|
25
|
-
logout
|
|
26
|
-
status
|
|
27
|
-
|
|
25
|
+
login Authenticate with Puter.com (opens browser)
|
|
26
|
+
logout Remove all stored Puter credentials
|
|
27
|
+
status Show current authentication status
|
|
28
|
+
serve Start a server (use with --mcp for MCP protocol)
|
|
29
|
+
help Show this help message
|
|
30
|
+
|
|
31
|
+
OPTIONS:
|
|
32
|
+
--mcp Start as MCP (Model Context Protocol) server for Zed/Claude Desktop
|
|
28
33
|
|
|
29
34
|
EXAMPLES:
|
|
30
|
-
puter-auth login
|
|
31
|
-
puter-auth status
|
|
32
|
-
puter-auth logout
|
|
35
|
+
puter-auth login # Start browser authentication
|
|
36
|
+
puter-auth status # Check if authenticated
|
|
37
|
+
puter-auth logout # Clear credentials
|
|
38
|
+
puter-auth serve --mcp # Start MCP server for Zed IDE
|
|
33
39
|
|
|
34
40
|
After authenticating, use Puter models in OpenCode:
|
|
35
41
|
opencode -m puter/claude-sonnet-4-5 "Your prompt"
|
|
36
42
|
opencode models puter # List available models
|
|
37
43
|
|
|
44
|
+
MCP Integration (Zed IDE, Claude Desktop):
|
|
45
|
+
Add to your MCP config:
|
|
46
|
+
{
|
|
47
|
+
"mcpServers": {
|
|
48
|
+
"puter": {
|
|
49
|
+
"command": "npx",
|
|
50
|
+
"args": ["opencode-puter-auth", "serve", "--mcp"]
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
38
55
|
For more info: https://github.com/Mihai-Codes/opencode-puter-auth
|
|
39
56
|
`;
|
|
40
57
|
async function main() {
|
|
@@ -92,6 +109,20 @@ async function main() {
|
|
|
92
109
|
}
|
|
93
110
|
break;
|
|
94
111
|
}
|
|
112
|
+
case 'serve': {
|
|
113
|
+
const isMcp = args.includes('--mcp');
|
|
114
|
+
if (isMcp) {
|
|
115
|
+
// Start MCP server
|
|
116
|
+
const { startMcpServer } = await import('./mcp-server.js');
|
|
117
|
+
await startMcpServer();
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
console.error('Unknown serve mode. Use --mcp for MCP server.');
|
|
121
|
+
console.log('Example: puter-auth serve --mcp');
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
95
126
|
default:
|
|
96
127
|
console.error(`Unknown command: ${command}`);
|
|
97
128
|
console.log(HELP);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Puter MCP Server for OpenCode
|
|
4
|
+
*
|
|
5
|
+
* Model Context Protocol server that exposes Puter.com AI models to MCP clients
|
|
6
|
+
* like Zed IDE, Claude Desktop, and other MCP-compatible applications.
|
|
7
|
+
*
|
|
8
|
+
* This server provides three tools:
|
|
9
|
+
* - puter-chat: Chat with AI models (Claude, GPT, Gemini, etc.)
|
|
10
|
+
* - puter-models: List all available models
|
|
11
|
+
* - puter-account: Show account info and credit usage
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* npx opencode-puter-auth serve --mcp
|
|
15
|
+
* # or directly:
|
|
16
|
+
* node dist/mcp-server.js
|
|
17
|
+
*
|
|
18
|
+
* IMPORTANT: This server uses stdio transport. All logging MUST go to stderr,
|
|
19
|
+
* never to stdout, as stdout is reserved for JSON-RPC messages.
|
|
20
|
+
*
|
|
21
|
+
* @module mcp-server
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* Start the MCP server
|
|
25
|
+
*/
|
|
26
|
+
export declare function startMcpServer(): Promise<void>;
|
|
27
|
+
//# sourceMappingURL=mcp-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;GAoBG;AAwUH;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAsBpD"}
|
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Puter MCP Server for OpenCode
|
|
4
|
+
*
|
|
5
|
+
* Model Context Protocol server that exposes Puter.com AI models to MCP clients
|
|
6
|
+
* like Zed IDE, Claude Desktop, and other MCP-compatible applications.
|
|
7
|
+
*
|
|
8
|
+
* This server provides three tools:
|
|
9
|
+
* - puter-chat: Chat with AI models (Claude, GPT, Gemini, etc.)
|
|
10
|
+
* - puter-models: List all available models
|
|
11
|
+
* - puter-account: Show account info and credit usage
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* npx opencode-puter-auth serve --mcp
|
|
15
|
+
* # or directly:
|
|
16
|
+
* node dist/mcp-server.js
|
|
17
|
+
*
|
|
18
|
+
* IMPORTANT: This server uses stdio transport. All logging MUST go to stderr,
|
|
19
|
+
* never to stdout, as stdout is reserved for JSON-RPC messages.
|
|
20
|
+
*
|
|
21
|
+
* @module mcp-server
|
|
22
|
+
*/
|
|
23
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
24
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
25
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
26
|
+
import { z } from 'zod';
|
|
27
|
+
import { createPuterAuthManager } from './auth.js';
|
|
28
|
+
import { PuterClient } from './client.js';
|
|
29
|
+
import { homedir } from 'os';
|
|
30
|
+
import { join } from 'path';
|
|
31
|
+
// Configuration
|
|
32
|
+
const CONFIG_DIR = join(homedir(), '.config', 'opencode');
|
|
33
|
+
const SERVER_NAME = 'puter-mcp';
|
|
34
|
+
const SERVER_VERSION = '1.1.0';
|
|
35
|
+
// Logger that writes to stderr (never stdout!)
|
|
36
|
+
const log = {
|
|
37
|
+
info: (msg, data) => {
|
|
38
|
+
console.error(`[${SERVER_NAME}] ${msg}`, data ? JSON.stringify(data) : '');
|
|
39
|
+
},
|
|
40
|
+
error: (msg, error) => {
|
|
41
|
+
console.error(`[${SERVER_NAME}] ERROR: ${msg}`, error instanceof Error ? error.message : error);
|
|
42
|
+
},
|
|
43
|
+
debug: (msg, data) => {
|
|
44
|
+
if (process.env.DEBUG) {
|
|
45
|
+
console.error(`[${SERVER_NAME}] DEBUG: ${msg}`, data ? JSON.stringify(data) : '');
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
// Tool definitions
|
|
50
|
+
const TOOLS = [
|
|
51
|
+
{
|
|
52
|
+
name: 'puter-chat',
|
|
53
|
+
description: 'Chat with AI models through Puter.com. Supports Claude, GPT, Gemini, and 500+ other models. Returns the model\'s response.',
|
|
54
|
+
inputSchema: {
|
|
55
|
+
type: 'object',
|
|
56
|
+
properties: {
|
|
57
|
+
message: {
|
|
58
|
+
type: 'string',
|
|
59
|
+
description: 'The message to send to the AI model',
|
|
60
|
+
},
|
|
61
|
+
model: {
|
|
62
|
+
type: 'string',
|
|
63
|
+
description: 'Model ID to use (e.g., "claude-sonnet-4-5", "gpt-4o", "gemini-2.5-pro"). Defaults to "gpt-4o".',
|
|
64
|
+
},
|
|
65
|
+
system: {
|
|
66
|
+
type: 'string',
|
|
67
|
+
description: 'Optional system prompt to set the AI\'s behavior',
|
|
68
|
+
},
|
|
69
|
+
temperature: {
|
|
70
|
+
type: 'number',
|
|
71
|
+
description: 'Sampling temperature (0-2). Lower = more focused, higher = more creative. Default: 0.7',
|
|
72
|
+
},
|
|
73
|
+
max_tokens: {
|
|
74
|
+
type: 'number',
|
|
75
|
+
description: 'Maximum tokens in the response. Default: 4096',
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
required: ['message'],
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: 'puter-models',
|
|
83
|
+
description: 'List all available AI models from Puter.com. Returns model IDs, names, providers, and capabilities.',
|
|
84
|
+
inputSchema: {
|
|
85
|
+
type: 'object',
|
|
86
|
+
properties: {
|
|
87
|
+
provider: {
|
|
88
|
+
type: 'string',
|
|
89
|
+
description: 'Filter by provider (e.g., "anthropic", "openai", "google")',
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
name: 'puter-account',
|
|
96
|
+
description: 'Show Puter.com account information including username and credit usage.',
|
|
97
|
+
inputSchema: {
|
|
98
|
+
type: 'object',
|
|
99
|
+
properties: {},
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
];
|
|
103
|
+
// Input schemas for validation
|
|
104
|
+
const ChatInputSchema = z.object({
|
|
105
|
+
message: z.string().min(1, 'Message is required'),
|
|
106
|
+
model: z.string().optional().default('gpt-4o'),
|
|
107
|
+
system: z.string().optional(),
|
|
108
|
+
temperature: z.number().min(0).max(2).optional(),
|
|
109
|
+
max_tokens: z.number().positive().optional(),
|
|
110
|
+
});
|
|
111
|
+
const ModelsInputSchema = z.object({
|
|
112
|
+
provider: z.string().optional(),
|
|
113
|
+
});
|
|
114
|
+
/**
|
|
115
|
+
* Initialize and get the Puter client
|
|
116
|
+
*/
|
|
117
|
+
async function getPuterClient() {
|
|
118
|
+
try {
|
|
119
|
+
const authManager = createPuterAuthManager(CONFIG_DIR);
|
|
120
|
+
await authManager.init();
|
|
121
|
+
const account = authManager.getActiveAccount();
|
|
122
|
+
if (!account) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
const client = new PuterClient(account.authToken);
|
|
126
|
+
return { client, username: account.username };
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
log.error('Failed to initialize Puter client', error);
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Handle the puter-chat tool
|
|
135
|
+
*/
|
|
136
|
+
async function handleChat(args) {
|
|
137
|
+
const input = ChatInputSchema.parse(args);
|
|
138
|
+
const puter = await getPuterClient();
|
|
139
|
+
if (!puter) {
|
|
140
|
+
return JSON.stringify({
|
|
141
|
+
error: 'Not authenticated with Puter. Run "npx opencode-puter-auth login" first.',
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
log.info(`Chat request: model=${input.model}, message length=${input.message.length}`);
|
|
145
|
+
try {
|
|
146
|
+
const messages = [];
|
|
147
|
+
if (input.system) {
|
|
148
|
+
messages.push({ role: 'system', content: input.system });
|
|
149
|
+
}
|
|
150
|
+
messages.push({ role: 'user', content: input.message });
|
|
151
|
+
const response = await puter.client.chat(messages, {
|
|
152
|
+
model: input.model,
|
|
153
|
+
temperature: input.temperature,
|
|
154
|
+
max_tokens: input.max_tokens || 4096,
|
|
155
|
+
});
|
|
156
|
+
const content = response.message?.content || '';
|
|
157
|
+
log.info(`Chat response: ${content.length} chars`);
|
|
158
|
+
return content;
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
log.error('Chat failed', error);
|
|
162
|
+
return JSON.stringify({
|
|
163
|
+
error: error instanceof Error ? error.message : 'Chat request failed',
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Handle the puter-models tool
|
|
169
|
+
*/
|
|
170
|
+
async function handleModels(args) {
|
|
171
|
+
const input = ModelsInputSchema.parse(args);
|
|
172
|
+
const puter = await getPuterClient();
|
|
173
|
+
if (!puter) {
|
|
174
|
+
return JSON.stringify({
|
|
175
|
+
error: 'Not authenticated with Puter. Run "npx opencode-puter-auth login" first.',
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
log.info('Fetching models list');
|
|
179
|
+
try {
|
|
180
|
+
let models = await puter.client.listModels();
|
|
181
|
+
// Filter by provider if specified
|
|
182
|
+
if (input.provider) {
|
|
183
|
+
const providerLower = input.provider.toLowerCase();
|
|
184
|
+
models = models.filter(m => m.provider?.toLowerCase() === providerLower ||
|
|
185
|
+
m.id.toLowerCase().includes(providerLower));
|
|
186
|
+
}
|
|
187
|
+
log.info(`Found ${models.length} models`);
|
|
188
|
+
// Format output
|
|
189
|
+
const formatted = models.map(m => ({
|
|
190
|
+
id: m.id,
|
|
191
|
+
name: m.name,
|
|
192
|
+
provider: m.provider,
|
|
193
|
+
context_window: m.context_window,
|
|
194
|
+
max_output_tokens: m.max_output_tokens,
|
|
195
|
+
supports_streaming: m.supports_streaming,
|
|
196
|
+
supports_tools: m.supports_tools,
|
|
197
|
+
supports_vision: m.supports_vision,
|
|
198
|
+
}));
|
|
199
|
+
return JSON.stringify(formatted, null, 2);
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
log.error('Failed to fetch models', error);
|
|
203
|
+
return JSON.stringify({
|
|
204
|
+
error: error instanceof Error ? error.message : 'Failed to fetch models',
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Handle the puter-account tool
|
|
210
|
+
*/
|
|
211
|
+
async function handleAccount() {
|
|
212
|
+
const puter = await getPuterClient();
|
|
213
|
+
if (!puter) {
|
|
214
|
+
return JSON.stringify({
|
|
215
|
+
error: 'Not authenticated with Puter. Run "npx opencode-puter-auth login" first.',
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
log.info('Fetching account info');
|
|
219
|
+
try {
|
|
220
|
+
const usage = await puter.client.getMonthlyUsage();
|
|
221
|
+
// Format credit amounts (Puter uses 8 decimal places / microcents)
|
|
222
|
+
const formatCredits = (amount) => {
|
|
223
|
+
return `$${(amount / 100000000).toFixed(2)}`;
|
|
224
|
+
};
|
|
225
|
+
const allowance = usage.allowanceInfo?.monthUsageAllowance || 0;
|
|
226
|
+
const remaining = usage.allowanceInfo?.remaining || 0;
|
|
227
|
+
const used = allowance - remaining;
|
|
228
|
+
const result = {
|
|
229
|
+
username: puter.username,
|
|
230
|
+
monthly_allowance: formatCredits(allowance),
|
|
231
|
+
used: formatCredits(used),
|
|
232
|
+
remaining: formatCredits(remaining),
|
|
233
|
+
};
|
|
234
|
+
log.info(`Account: ${puter.username}, remaining: ${result.remaining}`);
|
|
235
|
+
return JSON.stringify(result, null, 2);
|
|
236
|
+
}
|
|
237
|
+
catch (error) {
|
|
238
|
+
log.error('Failed to fetch account info', error);
|
|
239
|
+
// Return basic info even if usage fetch fails
|
|
240
|
+
return JSON.stringify({
|
|
241
|
+
username: puter.username,
|
|
242
|
+
error: 'Could not fetch usage details: ' + (error instanceof Error ? error.message : 'Unknown error'),
|
|
243
|
+
}, null, 2);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Create and configure the MCP server
|
|
248
|
+
*/
|
|
249
|
+
function createServer() {
|
|
250
|
+
const server = new Server({
|
|
251
|
+
name: SERVER_NAME,
|
|
252
|
+
version: SERVER_VERSION,
|
|
253
|
+
}, {
|
|
254
|
+
capabilities: {
|
|
255
|
+
tools: {},
|
|
256
|
+
},
|
|
257
|
+
});
|
|
258
|
+
// Handle tool listing
|
|
259
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
260
|
+
log.debug('Tools list requested');
|
|
261
|
+
return { tools: TOOLS };
|
|
262
|
+
});
|
|
263
|
+
// Handle tool calls
|
|
264
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
265
|
+
const { name, arguments: args } = request.params;
|
|
266
|
+
log.info(`Tool called: ${name}`);
|
|
267
|
+
try {
|
|
268
|
+
let result;
|
|
269
|
+
switch (name) {
|
|
270
|
+
case 'puter-chat':
|
|
271
|
+
result = await handleChat(args);
|
|
272
|
+
break;
|
|
273
|
+
case 'puter-models':
|
|
274
|
+
result = await handleModels(args);
|
|
275
|
+
break;
|
|
276
|
+
case 'puter-account':
|
|
277
|
+
result = await handleAccount();
|
|
278
|
+
break;
|
|
279
|
+
default:
|
|
280
|
+
return {
|
|
281
|
+
content: [{ type: 'text', text: `Unknown tool: ${name}` }],
|
|
282
|
+
isError: true,
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
return {
|
|
286
|
+
content: [{ type: 'text', text: result }],
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
catch (error) {
|
|
290
|
+
log.error(`Tool ${name} failed`, error);
|
|
291
|
+
return {
|
|
292
|
+
content: [
|
|
293
|
+
{
|
|
294
|
+
type: 'text',
|
|
295
|
+
text: `Error: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
|
296
|
+
},
|
|
297
|
+
],
|
|
298
|
+
isError: true,
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
return server;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Start the MCP server
|
|
306
|
+
*/
|
|
307
|
+
export async function startMcpServer() {
|
|
308
|
+
log.info('Starting Puter MCP server...');
|
|
309
|
+
const server = createServer();
|
|
310
|
+
const transport = new StdioServerTransport();
|
|
311
|
+
// Handle graceful shutdown
|
|
312
|
+
process.on('SIGINT', async () => {
|
|
313
|
+
log.info('Shutting down...');
|
|
314
|
+
await server.close();
|
|
315
|
+
process.exit(0);
|
|
316
|
+
});
|
|
317
|
+
process.on('SIGTERM', async () => {
|
|
318
|
+
log.info('Shutting down...');
|
|
319
|
+
await server.close();
|
|
320
|
+
process.exit(0);
|
|
321
|
+
});
|
|
322
|
+
// Connect and run
|
|
323
|
+
await server.connect(transport);
|
|
324
|
+
log.info('Server connected on stdio');
|
|
325
|
+
}
|
|
326
|
+
// Run if executed directly
|
|
327
|
+
const isMainModule = import.meta.url === `file://${process.argv[1]}`;
|
|
328
|
+
if (isMainModule) {
|
|
329
|
+
startMcpServer().catch((error) => {
|
|
330
|
+
log.error('Failed to start server', error);
|
|
331
|
+
process.exit(1);
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
//# sourceMappingURL=mcp-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "opencode-puter-auth",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Puter.com OAuth plugin for OpenCode - Easy access to Claude, GPT, Gemini & 500+ AI models. No API keys needed, credit-based usage.",
|
|
5
5
|
"bin": {
|
|
6
|
-
"puter-auth": "dist/cli.js"
|
|
6
|
+
"puter-auth": "dist/cli.js",
|
|
7
|
+
"puter-mcp": "dist/mcp-server.js"
|
|
7
8
|
},
|
|
8
9
|
"main": "./dist/index.js",
|
|
9
10
|
"types": "./dist/index.d.ts",
|
|
@@ -51,7 +52,11 @@
|
|
|
51
52
|
"coding",
|
|
52
53
|
"llm",
|
|
53
54
|
"no-api-key",
|
|
54
|
-
"easy-setup"
|
|
55
|
+
"easy-setup",
|
|
56
|
+
"mcp",
|
|
57
|
+
"model-context-protocol",
|
|
58
|
+
"zed",
|
|
59
|
+
"claude-desktop"
|
|
55
60
|
],
|
|
56
61
|
"engines": {
|
|
57
62
|
"node": ">=20.0.0"
|
|
@@ -88,6 +93,7 @@
|
|
|
88
93
|
"@ai-sdk/provider": "^3.0.3",
|
|
89
94
|
"@ai-sdk/provider-utils": "^4.0.7",
|
|
90
95
|
"@heyputer/puter.js": "^2.2.5",
|
|
96
|
+
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
91
97
|
"ai": "^6.0.57",
|
|
92
98
|
"open": "^11.0.0",
|
|
93
99
|
"xdg-basedir": "^5.1.0",
|