@seven.io/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.
Files changed (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +295 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +129 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/client.d.ts +18 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +88 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/index.d.ts +3 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +245 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/oauth/flow.d.ts +12 -0
  16. package/dist/oauth/flow.d.ts.map +1 -0
  17. package/dist/oauth/flow.js +132 -0
  18. package/dist/oauth/flow.js.map +1 -0
  19. package/dist/oauth/pkce.d.ts +17 -0
  20. package/dist/oauth/pkce.d.ts.map +1 -0
  21. package/dist/oauth/pkce.js +39 -0
  22. package/dist/oauth/pkce.js.map +1 -0
  23. package/dist/oauth/refresh.d.ts +22 -0
  24. package/dist/oauth/refresh.d.ts.map +1 -0
  25. package/dist/oauth/refresh.js +53 -0
  26. package/dist/oauth/refresh.js.map +1 -0
  27. package/dist/oauth/server.d.ts +18 -0
  28. package/dist/oauth/server.d.ts.map +1 -0
  29. package/dist/oauth/server.js +553 -0
  30. package/dist/oauth/server.js.map +1 -0
  31. package/dist/oauth/tokens.d.ts +33 -0
  32. package/dist/oauth/tokens.d.ts.map +1 -0
  33. package/dist/oauth/tokens.js +104 -0
  34. package/dist/oauth/tokens.js.map +1 -0
  35. package/dist/tools/account.d.ts +68 -0
  36. package/dist/tools/account.d.ts.map +1 -0
  37. package/dist/tools/account.js +59 -0
  38. package/dist/tools/account.js.map +1 -0
  39. package/dist/tools/contacts.d.ts +101 -0
  40. package/dist/tools/contacts.d.ts.map +1 -0
  41. package/dist/tools/contacts.js +111 -0
  42. package/dist/tools/contacts.js.map +1 -0
  43. package/dist/tools/groups.d.ts +65 -0
  44. package/dist/tools/groups.d.ts.map +1 -0
  45. package/dist/tools/groups.js +86 -0
  46. package/dist/tools/groups.js.map +1 -0
  47. package/dist/tools/lookup.d.ts +22 -0
  48. package/dist/tools/lookup.d.ts.map +1 -0
  49. package/dist/tools/lookup.js +88 -0
  50. package/dist/tools/lookup.js.map +1 -0
  51. package/dist/tools/numbers.d.ts +79 -0
  52. package/dist/tools/numbers.d.ts.map +1 -0
  53. package/dist/tools/numbers.js +106 -0
  54. package/dist/tools/numbers.js.map +1 -0
  55. package/dist/tools/rcs.d.ts +100 -0
  56. package/dist/tools/rcs.d.ts.map +1 -0
  57. package/dist/tools/rcs.js +86 -0
  58. package/dist/tools/rcs.js.map +1 -0
  59. package/dist/tools/sender.d.ts +25 -0
  60. package/dist/tools/sender.d.ts.map +1 -0
  61. package/dist/tools/sender.js +25 -0
  62. package/dist/tools/sender.js.map +1 -0
  63. package/dist/tools/sms.d.ts +110 -0
  64. package/dist/tools/sms.d.ts.map +1 -0
  65. package/dist/tools/sms.js +95 -0
  66. package/dist/tools/sms.js.map +1 -0
  67. package/dist/tools/status.d.ts +81 -0
  68. package/dist/tools/status.d.ts.map +1 -0
  69. package/dist/tools/status.js +88 -0
  70. package/dist/tools/status.js.map +1 -0
  71. package/dist/tools/subaccounts.d.ts +108 -0
  72. package/dist/tools/subaccounts.d.ts.map +1 -0
  73. package/dist/tools/subaccounts.js +98 -0
  74. package/dist/tools/subaccounts.js.map +1 -0
  75. package/dist/tools/voice.d.ts +57 -0
  76. package/dist/tools/voice.d.ts.map +1 -0
  77. package/dist/tools/voice.js +54 -0
  78. package/dist/tools/voice.js.map +1 -0
  79. package/dist/tools/webhooks.d.ts +60 -0
  80. package/dist/tools/webhooks.d.ts.map +1 -0
  81. package/dist/tools/webhooks.js +58 -0
  82. package/dist/tools/webhooks.js.map +1 -0
  83. package/dist/types.d.ts +69 -0
  84. package/dist/types.d.ts.map +1 -0
  85. package/dist/types.js +2 -0
  86. package/dist/types.js.map +1 -0
  87. package/package.json +49 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,295 @@
1
+ # MCP Seven
2
+
3
+ Model Context Protocol (MCP) server for the [seven.io](https://www.seven.io) API. This server provides comprehensive access to seven.io's SMS, voice, RCS messaging, and account management services.
4
+
5
+ ## Features
6
+
7
+ ### Messaging
8
+ - **SMS**: Send and manage SMS messages
9
+ - **RCS**: Send Rich Communication Services messages with media and suggestions
10
+ - **Voice**: Send text-to-speech voice calls
11
+
12
+ ### Account Management
13
+ - **Balance**: Check account balance
14
+ - **Pricing**: Get pricing information by country
15
+ - **Analytics**: View account statistics
16
+
17
+ ### Lookup Services
18
+ - **Format Validation**: Validate phone number formats
19
+ - **HLR**: Home Location Register lookups (network info, roaming status)
20
+ - **MNP**: Mobile Number Portability lookups (carrier information)
21
+ - **CNAM**: Caller ID name lookups
22
+ - **RCS Capabilities**: Check if a number supports RCS
23
+
24
+ ### Contact Management
25
+ - **Contacts**: Full CRUD operations for contacts
26
+ - **Groups**: Manage contact groups
27
+
28
+ ### Phone Numbers
29
+ - Browse, purchase, and manage phone numbers
30
+
31
+ ### Advanced Features
32
+ - **Webhooks**: Register webhooks for events
33
+ - **Subaccounts**: Create and manage subaccounts
34
+ - **Status & Logbook**: Track message delivery and view history
35
+
36
+ ## Installation
37
+
38
+ ```bash
39
+ npm install -g @seven.io/seven-mcp
40
+ ```
41
+
42
+ ## Authentication
43
+
44
+ This MCP server supports two authentication methods:
45
+
46
+ ### Option 1: OAuth 2.0 with PKCE (Recommended)
47
+
48
+ OAuth provides better security with automatic token refresh and fine-grained scopes.
49
+
50
+ 1. **Login via CLI**:
51
+ ```bash
52
+ npx @seven.io/mcp login
53
+ ```
54
+
55
+ This will:
56
+ - Open your browser to seven.io OAuth authorization
57
+ - Request necessary permissions (SMS, Voice, RCS, etc.)
58
+ - Store tokens securely in your system keychain
59
+ - Auto-refresh tokens when they expire
60
+
61
+ **CLI Commands**:
62
+ ```bash
63
+ # Login with OAuth
64
+ npx @seven.io/mcp login
65
+
66
+ # Check authentication status
67
+ npx @seven.io/mcp status
68
+
69
+ # Logout (remove stored tokens)
70
+ npx @seven.io/mcp logout
71
+ ```
72
+
73
+ ### Option 2: API Key (Legacy)
74
+
75
+ For backwards compatibility, you can still use an API key:
76
+
77
+ ```bash
78
+ export SEVEN_API_KEY="your-api-key"
79
+ ```
80
+
81
+ Get your API key from the [seven.io dashboard](https://app.seven.io).
82
+
83
+ ### Priority
84
+
85
+ If both authentication methods are configured, OAuth takes priority.
86
+
87
+ ## Usage with Claude Desktop
88
+
89
+ Add this to your Claude Desktop configuration file:
90
+
91
+ **MacOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
92
+ **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
93
+
94
+ **With OAuth (recommended)**:
95
+ ```json
96
+ {
97
+ "mcpServers": {
98
+ "seven": {
99
+ "command": "node",
100
+ "args": ["/absolute/path/to/mcp-seven/dist/index.js"]
101
+ }
102
+ }
103
+ }
104
+ ```
105
+
106
+ **With API Key**:
107
+ ```json
108
+ {
109
+ "mcpServers": {
110
+ "seven": {
111
+ "command": "node",
112
+ "args": ["/absolute/path/to/mcp-seven/dist/index.js"],
113
+ "env": {
114
+ "SEVEN_API_KEY": "your-api-key"
115
+ }
116
+ }
117
+ }
118
+ }
119
+ ```
120
+
121
+ **With Debug Logging**:
122
+ To enable request/response logging for debugging, add the `SEVEN_LOG_FILE` environment variable:
123
+ ```json
124
+ {
125
+ "mcpServers": {
126
+ "seven": {
127
+ "command": "node",
128
+ "args": ["/absolute/path/to/mcp-seven/dist/index.js"],
129
+ "env": {
130
+ "SEVEN_API_KEY": "your-api-key",
131
+ "SEVEN_LOG_FILE": "/tmp/mcp-seven-debug.log"
132
+ }
133
+ }
134
+ }
135
+ }
136
+ ```
137
+
138
+ Then monitor the log file:
139
+ ```bash
140
+ tail -f /tmp/mcp-seven-debug.log
141
+ ```
142
+
143
+ **Note**: If using OAuth, run `npx @seven.io/mcp login` before starting Claude Desktop.
144
+
145
+ ## Available Tools
146
+
147
+ ### Messaging Tools
148
+ - `send_sms` - Send SMS messages
149
+ - `delete_sms` - Delete scheduled SMS
150
+ - `send_rcs` - Send RCS messages
151
+ - `delete_rcs` - Delete RCS messages
152
+ - `rcs_events` - Handle RCS events
153
+ - `send_voice` - Send voice calls
154
+ - `hangup_voice` - End active voice calls
155
+
156
+ ### Account Tools
157
+ - `get_balance` - Check account balance
158
+ - `get_pricing` - Get pricing information
159
+ - `get_analytics` - View account statistics
160
+
161
+ ### Lookup Tools
162
+ - `lookup_format` - Validate phone number format
163
+ - `lookup_hlr` - Home Location Register lookup
164
+ - `lookup_mnp` - Mobile Number Portability lookup
165
+ - `lookup_cnam` - Caller ID name lookup
166
+ - `lookup_rcs` - Check RCS capabilities
167
+
168
+ ### Status & Logbook Tools
169
+ - `get_status` - Check message delivery status
170
+ - `get_logbook_sent` - View sent messages
171
+ - `get_logbook_received` - View received SMS
172
+ - `get_logbook_voice` - View voice call history
173
+
174
+ ### Phone Numbers Tools
175
+ - `get_available_numbers` - List available numbers
176
+ - `order_number` - Purchase a phone number
177
+ - `get_active_numbers` - List active numbers
178
+ - `get_number` - Get number details
179
+ - `update_number` - Update number configuration
180
+ - `delete_number` - Cancel/delete number
181
+
182
+ ### Contact Tools
183
+ - `list_contacts` - List all contacts
184
+ - `create_contact` - Create new contact
185
+ - `get_contact` - Get contact by ID
186
+ - `update_contact` - Update contact
187
+ - `delete_contact` - Delete contact
188
+
189
+ ### Group Tools
190
+ - `list_groups` - List all groups
191
+ - `create_group` - Create new group
192
+ - `get_group` - Get group by ID
193
+ - `update_group` - Update group
194
+ - `delete_group` - Delete group
195
+
196
+ ### Subaccount Tools
197
+ - `list_subaccounts` - List all subaccounts
198
+ - `create_subaccount` - Create new subaccount
199
+ - `update_subaccount` - Update subaccount settings
200
+ - `transfer_credits` - Transfer credits to subaccount
201
+ - `delete_subaccount` - Delete subaccount
202
+
203
+ ### Webhook Tools
204
+ - `list_webhooks` - List registered webhooks
205
+ - `create_webhook` - Register new webhook
206
+ - `delete_webhook` - Delete webhook
207
+
208
+ ### Sender Tools
209
+ - `validate_sender` - Validate sender identifiers
210
+
211
+ ## Example Usage
212
+
213
+ Once configured, you can use the tools in Claude:
214
+
215
+ ```
216
+ Send an SMS to +1234567890 saying "Hello from seven.io!"
217
+ ```
218
+
219
+ ```
220
+ Check my account balance
221
+ ```
222
+
223
+ ```
224
+ Look up the carrier information for phone number +1234567890
225
+ ```
226
+
227
+ ## Development
228
+
229
+ ### Watch mode
230
+ ```bash
231
+ npm run watch
232
+ ```
233
+
234
+ ### Build
235
+ ```bash
236
+ npm run build
237
+ ```
238
+
239
+ ### Testing
240
+
241
+ Run the comprehensive test suite:
242
+
243
+ ```bash
244
+ npm test
245
+ ```
246
+
247
+ Run tests in watch mode:
248
+ ```bash
249
+ npm run test:watch
250
+ ```
251
+
252
+ Generate coverage report:
253
+ ```bash
254
+ npm run test:coverage
255
+ ```
256
+
257
+ #### Test Coverage
258
+
259
+ The test suite includes:
260
+ - **Unit tests** for all API client methods
261
+ - **Tool tests** for all 40+ MCP tools covering:
262
+ - RCS messaging (3 tools)
263
+ - SMS messaging (2 tools)
264
+ - Voice calls (2 tools)
265
+ - Account management (3 tools)
266
+ - Lookup services (5 tools)
267
+ - Status & Logbook (4 tools)
268
+ - Phone number management (6 tools)
269
+ - Contact management (5 tools)
270
+ - Group management (5 tools)
271
+ - Subaccount management (5 tools)
272
+ - Webhook management (3 tools)
273
+ - Sender validation (1 tool)
274
+ - **Integration tests** verifying all tools export correctly and have valid schemas
275
+ - **Endpoint validation tests** that verify API endpoint paths are correct (requires SEVEN_API_KEY)
276
+
277
+ Coverage target: 80% for branches, functions, lines, and statements.
278
+
279
+ #### Endpoint Validation
280
+
281
+ To run endpoint validation tests that verify the API paths are correct:
282
+
283
+ ```bash
284
+ SEVEN_API_KEY=your-api-key npm test
285
+ ```
286
+
287
+ These integration tests ensure that endpoints match the seven.io API documentation and will catch issues like incorrect paths (e.g., using `/logbook/received` instead of `/journal/inbound`).
288
+
289
+ ## API Documentation
290
+
291
+ For detailed API documentation, visit [docs.seven.io](https://docs.seven.io).
292
+
293
+ ## License
294
+
295
+ MIT
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,129 @@
1
+ #!/usr/bin/env node
2
+ import { performOAuthFlow } from './oauth/flow.js';
3
+ import { getTokens, deleteTokens, hasTokens } from './oauth/tokens.js';
4
+ const CLIENT_ID = 'seven-mcp'; // Static OAuth client ID
5
+ async function main() {
6
+ const command = process.argv[2];
7
+ switch (command) {
8
+ case 'login':
9
+ await handleLogin();
10
+ break;
11
+ case 'logout':
12
+ await handleLogout();
13
+ break;
14
+ case 'status':
15
+ await handleStatus();
16
+ break;
17
+ default:
18
+ showHelp();
19
+ process.exit(1);
20
+ }
21
+ }
22
+ async function handleLogin() {
23
+ try {
24
+ // Check if already logged in
25
+ if (await hasTokens()) {
26
+ console.log('You are already logged in.');
27
+ console.log('Run "seven-mcp logout" first if you want to log in again.');
28
+ process.exit(0);
29
+ }
30
+ // Perform OAuth flow
31
+ await performOAuthFlow({
32
+ clientId: CLIENT_ID,
33
+ scope: 'analytics balance contacts groups hooks journal lookup numbers pricing rcs sms status subaccounts validate_for_voice voice',
34
+ });
35
+ console.log('\n✓ Login successful!');
36
+ console.log('You can now use the seven.io MCP server with OAuth authentication.');
37
+ }
38
+ catch (error) {
39
+ console.error('\n✗ Login failed:', error.message);
40
+ process.exit(1);
41
+ }
42
+ }
43
+ async function handleLogout() {
44
+ try {
45
+ if (!(await hasTokens())) {
46
+ console.log('You are not logged in.');
47
+ process.exit(0);
48
+ }
49
+ const deleted = await deleteTokens();
50
+ if (deleted) {
51
+ console.log('✓ Logout successful. Tokens have been removed.');
52
+ }
53
+ else {
54
+ console.log('No tokens found to remove.');
55
+ }
56
+ }
57
+ catch (error) {
58
+ console.error('✗ Logout failed:', error.message);
59
+ process.exit(1);
60
+ }
61
+ }
62
+ async function handleStatus() {
63
+ try {
64
+ const tokens = await getTokens();
65
+ if (!tokens) {
66
+ console.log('Status: Not logged in');
67
+ console.log('\nRun "seven-mcp login" to authenticate.');
68
+ process.exit(0);
69
+ }
70
+ const now = Math.floor(Date.now() / 1000);
71
+ const expiresIn = tokens.expires_at - now;
72
+ console.log('Status: Logged in');
73
+ // Try to get account info from keychain
74
+ try {
75
+ const keytar = await import('keytar');
76
+ const k = keytar.default || keytar;
77
+ const account = await k.getPassword('seven-mcp', 'current-account');
78
+ if (account) {
79
+ console.log(`Account: ${account}`);
80
+ }
81
+ }
82
+ catch { }
83
+ console.log(`Token type: ${tokens.token_type}`);
84
+ console.log(`Scope: ${tokens.scope || 'N/A'}`);
85
+ if (expiresIn > 0) {
86
+ const minutes = Math.floor(expiresIn / 60);
87
+ const seconds = expiresIn % 60;
88
+ console.log(`Expires in: ${minutes}m ${seconds}s`);
89
+ }
90
+ else {
91
+ console.log('Token: EXPIRED (will be auto-refreshed on next use)');
92
+ }
93
+ }
94
+ catch (error) {
95
+ console.error('✗ Failed to check status:', error.message);
96
+ process.exit(1);
97
+ }
98
+ }
99
+ function showHelp() {
100
+ console.log(`
101
+ seven-mcp - Seven.io MCP Server CLI
102
+
103
+ USAGE:
104
+ seven-mcp <command>
105
+
106
+ COMMANDS:
107
+ login Authenticate with seven.io using OAuth
108
+ logout Remove stored authentication tokens
109
+ status Show current authentication status
110
+ help Show this help message
111
+
112
+ EXAMPLES:
113
+ # Login with OAuth
114
+ seven-mcp login
115
+
116
+ # Check authentication status
117
+ seven-mcp status
118
+
119
+ # Logout
120
+ seven-mcp logout
121
+
122
+ For more information, visit https://github.com/yourusername/mcp-seven
123
+ `);
124
+ }
125
+ main().catch((error) => {
126
+ console.error('Fatal error:', error);
127
+ process.exit(1);
128
+ });
129
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { SevenConfig } from './types.js';
2
+ export declare class SevenClient {
3
+ private client;
4
+ private apiKey?;
5
+ private clientId?;
6
+ private useOAuth;
7
+ constructor(config: SevenConfig);
8
+ get<T>(path: string, params?: Record<string, any>): Promise<T>;
9
+ private encodeFormData;
10
+ post<T>(path: string, data?: Record<string, any>, options?: {
11
+ formEncoded?: boolean;
12
+ }): Promise<T>;
13
+ patch<T>(path: string, data?: Record<string, any>, options?: {
14
+ formEncoded?: boolean;
15
+ }): Promise<T>;
16
+ delete<T>(path: string): Promise<T>;
17
+ }
18
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAkB;gBAEtB,MAAM,EAAE,WAAW;IAwCzB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAKpE,OAAO,CAAC,cAAc;IAahB,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAWlG,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAWnG,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAI1C"}
package/dist/client.js ADDED
@@ -0,0 +1,88 @@
1
+ import axios from 'axios';
2
+ import { getValidAccessToken } from './oauth/refresh.js';
3
+ import { getTokens } from './oauth/tokens.js';
4
+ export class SevenClient {
5
+ client;
6
+ apiKey;
7
+ clientId;
8
+ useOAuth = false;
9
+ constructor(config) {
10
+ this.apiKey = config.apiKey;
11
+ this.clientId = config.clientId;
12
+ const baseUrl = config.baseUrl || 'https://gateway.seven.io/api';
13
+ this.client = axios.create({
14
+ baseURL: baseUrl,
15
+ headers: {
16
+ 'Content-Type': 'application/json',
17
+ },
18
+ });
19
+ // Add request interceptor to handle authentication
20
+ this.client.interceptors.request.use(async (config) => {
21
+ // Try OAuth first if client ID is provided
22
+ if (this.clientId) {
23
+ try {
24
+ const tokens = await getTokens();
25
+ if (tokens) {
26
+ const accessToken = await getValidAccessToken(this.clientId);
27
+ config.headers.Authorization = `Bearer ${accessToken}`;
28
+ this.useOAuth = true;
29
+ return config;
30
+ }
31
+ }
32
+ catch (error) {
33
+ // Fall through to API key
34
+ }
35
+ }
36
+ // Fallback to API key
37
+ if (this.apiKey) {
38
+ config.headers['X-API-Key'] = this.apiKey;
39
+ }
40
+ else if (!this.useOAuth) {
41
+ throw new Error('No authentication method available. Please set SEVEN_API_KEY or run "seven-mcp login"');
42
+ }
43
+ return config;
44
+ });
45
+ }
46
+ async get(path, params) {
47
+ const response = await this.client.get(path, { params });
48
+ return response.data;
49
+ }
50
+ encodeFormData(data) {
51
+ const params = new URLSearchParams();
52
+ for (const [key, value] of Object.entries(data)) {
53
+ if (Array.isArray(value)) {
54
+ // For arrays, append each value with array bracket notation
55
+ value.forEach((item) => params.append(`${key}[]`, item));
56
+ }
57
+ else if (value !== undefined && value !== null) {
58
+ params.append(key, value);
59
+ }
60
+ }
61
+ return params.toString();
62
+ }
63
+ async post(path, data, options) {
64
+ const config = options?.formEncoded
65
+ ? {
66
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
67
+ transformRequest: [(data) => this.encodeFormData(data)]
68
+ }
69
+ : {};
70
+ const response = await this.client.post(path, data, config);
71
+ return response.data;
72
+ }
73
+ async patch(path, data, options) {
74
+ const config = options?.formEncoded
75
+ ? {
76
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
77
+ transformRequest: [(data) => this.encodeFormData(data)]
78
+ }
79
+ : {};
80
+ const response = await this.client.patch(path, data, config);
81
+ return response.data;
82
+ }
83
+ async delete(path) {
84
+ const response = await this.client.delete(path);
85
+ return response.data;
86
+ }
87
+ }
88
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}