@pcircle/evidencemcp-server 0.1.0 → 0.1.1
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 +27 -297
- package/dist/index.d.ts +1 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +52 -120
- package/dist/index.js.map +1 -1
- package/dist/test-helpers.d.ts +12 -30
- package/dist/test-helpers.d.ts.map +1 -1
- package/dist/test-helpers.js +59 -121
- package/dist/test-helpers.js.map +1 -1
- package/dist/types.d.ts +0 -25
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,62 +2,31 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@pcircle/evidencemcp-server)
|
|
4
4
|
[](LICENSE)
|
|
5
|
-
[](tests/)
|
|
6
|
-
[](package.json)
|
|
7
5
|
|
|
8
|
-
Model Context Protocol (MCP) server
|
|
6
|
+
Model Context Protocol (MCP) server that automatically captures and encrypts LLM conversations as legal evidence.
|
|
9
7
|
|
|
10
8
|
## Why EvidenceMCP?
|
|
11
9
|
|
|
12
|
-
|
|
13
|
-
- **
|
|
14
|
-
- **
|
|
15
|
-
- **Legally Valid** - Git timestamps +
|
|
16
|
-
- **Privacy First** - All data encrypted locally, never leaves your machine
|
|
17
|
-
|
|
18
|
-
### For Researchers & Academics
|
|
19
|
-
- **Research Integrity** - Document AI-assisted research with provable timestamps
|
|
20
|
-
- **Audit Trail** - Complete conversation history for methodology transparency
|
|
21
|
-
- **Compliance Ready** - Meet institutional requirements for AI usage disclosure
|
|
22
|
-
|
|
23
|
-
### For Teams & Organizations
|
|
24
|
-
- **Risk Mitigation** - Legal protection against IP disputes over AI-generated content
|
|
25
|
-
- **Quality Assurance** - Review and audit LLM interactions for compliance
|
|
26
|
-
- **Knowledge Management** - Searchable archive of all LLM conversations
|
|
27
|
-
|
|
28
|
-
## Features
|
|
29
|
-
|
|
30
|
-
- 🔐 **End-to-End Encryption** - XChaCha20-Poly1305 authenticated encryption
|
|
31
|
-
- 📝 **Automatic Capture** - Intercepts LLM conversations via MCP protocol
|
|
32
|
-
- 🕒 **Git Timestamps** - Provable timestamps from Git commits
|
|
33
|
-
- 📦 **Evidence Export** - ZIP archives with SHA-256 checksums
|
|
34
|
-
- 🔍 **Evidence Management** - List, retrieve, and decrypt stored evidence
|
|
10
|
+
- **Prove IP Ownership** - Timestamped evidence of LLM-assisted work
|
|
11
|
+
- **Zero Effort** - Automatic capture via MCP protocol
|
|
12
|
+
- **Privacy First** - End-to-end encrypted, locally stored
|
|
13
|
+
- **Legally Valid** - Git timestamps + SHA-256 checksums
|
|
35
14
|
|
|
36
15
|
## Installation
|
|
37
16
|
|
|
38
17
|
```bash
|
|
39
|
-
|
|
18
|
+
npm install -g @pcircle/evidencemcp-server
|
|
40
19
|
```
|
|
41
20
|
|
|
42
21
|
## Quick Start
|
|
43
22
|
|
|
44
|
-
|
|
45
|
-
|
|
23
|
+
1. **Set environment variables:**
|
|
46
24
|
```bash
|
|
47
25
|
export EVIDENCEMCP_DB_PATH="./evidence.db"
|
|
48
26
|
export EVIDENCEMCP_PASSWORD="your-secure-password"
|
|
49
27
|
```
|
|
50
28
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
```bash
|
|
54
|
-
npx evidencemcp-mcp
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
### 3. Configure Claude Desktop
|
|
58
|
-
|
|
59
|
-
Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
|
|
60
|
-
|
|
29
|
+
2. **Configure Claude Desktop** (`~/Library/Application Support/Claude/claude_desktop_config.json`):
|
|
61
30
|
```json
|
|
62
31
|
{
|
|
63
32
|
"mcpServers": {
|
|
@@ -73,278 +42,39 @@ Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
|
|
|
73
42
|
}
|
|
74
43
|
```
|
|
75
44
|
|
|
76
|
-
|
|
45
|
+
3. **Restart Claude Desktop** - Evidence collection starts automatically
|
|
77
46
|
|
|
78
|
-
|
|
47
|
+
## Features
|
|
79
48
|
|
|
80
|
-
|
|
49
|
+
- 🔐 XChaCha20-Poly1305 encryption
|
|
50
|
+
- 🕒 Git commit timestamps
|
|
51
|
+
- 📦 Tamper-proof ZIP exports
|
|
52
|
+
- 🔍 Search and retrieve evidence
|
|
81
53
|
|
|
82
|
-
|
|
83
|
-
- `conversationId` (string) - Unique conversation identifier
|
|
84
|
-
- `llmProvider` (string) - LLM provider name (e.g., "Claude Sonnet 4.5")
|
|
85
|
-
- `content` (string) - Conversation content
|
|
86
|
-
- `messageCount` (number) - Number of messages
|
|
87
|
-
- `tags` (string, optional) - Comma-separated tags
|
|
54
|
+
## MCP Tools
|
|
88
55
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
{
|
|
92
|
-
"id": "uuid-v4",
|
|
93
|
-
"timestamp": "2024-01-24T00:00:00Z",
|
|
94
|
-
"gitCommitHash": "abc123...",
|
|
95
|
-
"success": true
|
|
96
|
-
}
|
|
97
|
-
```
|
|
56
|
+
### capture-evidence
|
|
57
|
+
Captures and encrypts an LLM conversation.
|
|
98
58
|
|
|
99
59
|
### list-evidences
|
|
100
|
-
|
|
101
|
-
List all captured evidence with pagination.
|
|
102
|
-
|
|
103
|
-
**Input:**
|
|
104
|
-
- `limit` (number, optional) - Maximum results
|
|
105
|
-
- `offset` (number, optional) - Pagination offset
|
|
106
|
-
|
|
107
|
-
**Output:**
|
|
108
|
-
```json
|
|
109
|
-
{
|
|
110
|
-
"evidences": [
|
|
111
|
-
{
|
|
112
|
-
"id": "uuid",
|
|
113
|
-
"timestamp": "2024-01-24T00:00:00Z",
|
|
114
|
-
"conversationId": "conv-001",
|
|
115
|
-
"llmProvider": "Claude Sonnet 4.5",
|
|
116
|
-
"messageCount": 10,
|
|
117
|
-
"tags": "legal,contract"
|
|
118
|
-
}
|
|
119
|
-
],
|
|
120
|
-
"total": 1
|
|
121
|
-
}
|
|
122
|
-
```
|
|
60
|
+
Lists all captured evidence with pagination.
|
|
123
61
|
|
|
124
62
|
### get-evidence
|
|
125
|
-
|
|
126
|
-
Retrieve and decrypt specific evidence.
|
|
127
|
-
|
|
128
|
-
**Input:**
|
|
129
|
-
- `id` (string) - Evidence ID
|
|
130
|
-
|
|
131
|
-
**Output:**
|
|
132
|
-
```json
|
|
133
|
-
{
|
|
134
|
-
"id": "uuid",
|
|
135
|
-
"timestamp": "2024-01-24T00:00:00Z",
|
|
136
|
-
"conversationId": "conv-001",
|
|
137
|
-
"llmProvider": "Claude Sonnet 4.5",
|
|
138
|
-
"content": "User: ...\nAssistant: ...",
|
|
139
|
-
"messageCount": 10,
|
|
140
|
-
"gitInfo": {
|
|
141
|
-
"commitHash": "abc123",
|
|
142
|
-
"timestamp": "2024-01-24T00:00:00Z"
|
|
143
|
-
},
|
|
144
|
-
"tags": "legal"
|
|
145
|
-
}
|
|
146
|
-
```
|
|
63
|
+
Retrieves and decrypts specific evidence by ID.
|
|
147
64
|
|
|
148
65
|
### export-evidences
|
|
149
|
-
|
|
150
|
-
Export evidences to encrypted ZIP archive.
|
|
151
|
-
|
|
152
|
-
**Input:**
|
|
153
|
-
- `evidenceIds` (string[], optional) - Specific IDs (empty = all)
|
|
154
|
-
- `includeGitInfo` (boolean, optional) - Include Git timestamps
|
|
155
|
-
|
|
156
|
-
**Output:**
|
|
157
|
-
```json
|
|
158
|
-
{
|
|
159
|
-
"filename": "evidence-export-2024-01-24.zip",
|
|
160
|
-
"checksum": "sha256-hash",
|
|
161
|
-
"evidenceCount": 5,
|
|
162
|
-
"success": true
|
|
163
|
-
}
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
## MCP Resources
|
|
167
|
-
|
|
168
|
-
### evidence://{id}
|
|
169
|
-
|
|
170
|
-
Access decrypted evidence content via URI.
|
|
171
|
-
|
|
172
|
-
**Example:**
|
|
173
|
-
```
|
|
174
|
-
evidence://550e8400-e29b-41d4-a716-446655440000
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
Returns plain text content of the evidence.
|
|
178
|
-
|
|
179
|
-
## Programmatic Usage
|
|
180
|
-
|
|
181
|
-
```typescript
|
|
182
|
-
import { EvidenceMCPServer } from '@pcircle/evidencemcp-server';
|
|
183
|
-
|
|
184
|
-
const server = new EvidenceMCPServer({
|
|
185
|
-
dbPath: './evidence.db',
|
|
186
|
-
password: 'your-password'
|
|
187
|
-
});
|
|
188
|
-
|
|
189
|
-
await server.start();
|
|
190
|
-
```
|
|
66
|
+
Exports evidence to encrypted ZIP archive.
|
|
191
67
|
|
|
192
68
|
## Security
|
|
193
69
|
|
|
194
|
-
- **Encryption**: XChaCha20-Poly1305 (256-bit
|
|
195
|
-
- **Key Derivation**: Argon2id (OWASP recommended
|
|
196
|
-
- **
|
|
197
|
-
- **Local Storage**: SQLite with encrypted BLOB fields
|
|
198
|
-
|
|
199
|
-
⚠️ **Important**: Store your `EVIDENCEMCP_PASSWORD` securely (e.g., macOS Keychain). Loss of password means permanent data loss.
|
|
200
|
-
|
|
201
|
-
## Architecture
|
|
202
|
-
|
|
203
|
-
```
|
|
204
|
-
┌─────────────────┐
|
|
205
|
-
│ LLM Client │ (Claude Desktop, ChatGPT, etc.)
|
|
206
|
-
│ (MCP Client) │
|
|
207
|
-
└────────┬────────┘
|
|
208
|
-
│ MCP Protocol (stdio)
|
|
209
|
-
▼
|
|
210
|
-
┌─────────────────┐
|
|
211
|
-
│ EvidenceMCP MCP │
|
|
212
|
-
│ Server │
|
|
213
|
-
├─────────────────┤
|
|
214
|
-
│ Tools: │
|
|
215
|
-
│ - capture │
|
|
216
|
-
│ - list │
|
|
217
|
-
│ - export │
|
|
218
|
-
│ - get │
|
|
219
|
-
├─────────────────┤
|
|
220
|
-
│ Resources: │
|
|
221
|
-
│ - evidence:// │
|
|
222
|
-
└────────┬────────┘
|
|
223
|
-
│
|
|
224
|
-
▼
|
|
225
|
-
┌─────────────────┐ ┌──────────────┐
|
|
226
|
-
│ @evidencemcp/ │────▶│ XChaCha20 │
|
|
227
|
-
│ crypto │ │ -Poly1305 │
|
|
228
|
-
└─────────────────┘ └──────────────┘
|
|
229
|
-
│
|
|
230
|
-
▼
|
|
231
|
-
┌─────────────────┐ ┌──────────────┐
|
|
232
|
-
│ @evidencemcp/ │────▶│ SQLite │
|
|
233
|
-
│ storage │ │ (encrypted) │
|
|
234
|
-
└─────────────────┘ └──────────────┘
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
## Troubleshooting
|
|
238
|
-
|
|
239
|
-
### "EVIDENCEMCP_PASSWORD environment variable required"
|
|
240
|
-
|
|
241
|
-
**Problem**: Server fails to start with this error message.
|
|
242
|
-
|
|
243
|
-
**Solution**:
|
|
244
|
-
1. Ensure `EVIDENCEMCP_PASSWORD` is set in your environment
|
|
245
|
-
2. For Claude Desktop, verify the `env` section in `claude_desktop_config.json`:
|
|
246
|
-
```json
|
|
247
|
-
{
|
|
248
|
-
"mcpServers": {
|
|
249
|
-
"evidencemcp": {
|
|
250
|
-
"env": {
|
|
251
|
-
"EVIDENCEMCP_PASSWORD": "your-secure-password"
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
```
|
|
257
|
-
3. For command line: `export EVIDENCEMCP_PASSWORD="your-password"`
|
|
258
|
-
4. Never commit passwords to version control
|
|
259
|
-
|
|
260
|
-
### "Database locked" or "SQLITE_BUSY"
|
|
261
|
-
|
|
262
|
-
**Problem**: Multiple processes trying to access the same database file.
|
|
263
|
-
|
|
264
|
-
**Solution**:
|
|
265
|
-
1. Ensure only one EvidenceMCP instance is running
|
|
266
|
-
2. Check for orphaned processes: `ps aux | grep evidencemcp-mcp`
|
|
267
|
-
3. Use unique database paths for different instances:
|
|
268
|
-
```json
|
|
269
|
-
{
|
|
270
|
-
"evidencemcp-dev": {
|
|
271
|
-
"env": {
|
|
272
|
-
"EVIDENCEMCP_DB_PATH": "/Users/you/evidencemcp-dev.db"
|
|
273
|
-
}
|
|
274
|
-
},
|
|
275
|
-
"evidencemcp-prod": {
|
|
276
|
-
"env": {
|
|
277
|
-
"EVIDENCEMCP_DB_PATH": "/Users/you/evidencemcp-prod.db"
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
### "Git not found" or "Git command failed"
|
|
284
|
-
|
|
285
|
-
**Problem**: Git timestamp capture fails.
|
|
286
|
-
|
|
287
|
-
**Solution**:
|
|
288
|
-
1. Install Git if not present: `brew install git` (macOS) or `apt-get install git` (Linux)
|
|
289
|
-
2. Verify Git is in PATH: `which git`
|
|
290
|
-
3. Git timestamps are optional - evidence capture will succeed without them
|
|
291
|
-
4. Check `.git` directory exists if running in a repository
|
|
292
|
-
|
|
293
|
-
### "Permission denied" on database file
|
|
294
|
-
|
|
295
|
-
**Problem**: Cannot read/write database file.
|
|
296
|
-
|
|
297
|
-
**Solution**:
|
|
298
|
-
1. Check file permissions: `ls -l /path/to/evidence.db`
|
|
299
|
-
2. Ensure the directory exists and is writable
|
|
300
|
-
3. Verify the user running Claude Desktop has write access
|
|
301
|
-
4. On macOS, grant Full Disk Access if needed (System Settings → Privacy & Security)
|
|
302
|
-
|
|
303
|
-
### "Failed to decrypt evidence" or "Wrong password"
|
|
304
|
-
|
|
305
|
-
**Problem**: Cannot decrypt previously stored evidence.
|
|
306
|
-
|
|
307
|
-
**Solution**:
|
|
308
|
-
1. Verify you're using the same password that was used to encrypt
|
|
309
|
-
2. Passwords are case-sensitive
|
|
310
|
-
3. Check for trailing spaces or special characters in password
|
|
311
|
-
4. If password is lost, evidence cannot be recovered (by design)
|
|
312
|
-
|
|
313
|
-
### "Export failed" or "ZIP creation error"
|
|
314
|
-
|
|
315
|
-
**Problem**: Evidence export fails.
|
|
316
|
-
|
|
317
|
-
**Solution**:
|
|
318
|
-
1. Ensure sufficient disk space
|
|
319
|
-
2. Check write permissions in current directory
|
|
320
|
-
3. Verify evidence IDs exist: use `list-evidences` first
|
|
321
|
-
4. Try exporting single evidence item to isolate the issue
|
|
322
|
-
|
|
323
|
-
### High memory usage
|
|
324
|
-
|
|
325
|
-
**Problem**: Server consuming excessive memory.
|
|
326
|
-
|
|
327
|
-
**Solution**:
|
|
328
|
-
1. Evidence files are loaded into memory during encryption/decryption
|
|
329
|
-
2. For large conversations (>10MB), use pagination with `list-evidences`
|
|
330
|
-
3. Export in smaller batches instead of all at once
|
|
331
|
-
4. Restart Claude Desktop to free memory
|
|
332
|
-
|
|
333
|
-
### TypeScript errors in development
|
|
334
|
-
|
|
335
|
-
**Problem**: TypeScript compilation errors.
|
|
336
|
-
|
|
337
|
-
**Solution**:
|
|
338
|
-
1. Ensure you're using TypeScript 5.9+: `pnpm add -D typescript@^5.9.3`
|
|
339
|
-
2. Clean build artifacts: `pnpm clean && pnpm build`
|
|
340
|
-
3. Check Node.js version: `node --version` (requires 22+)
|
|
341
|
-
4. Verify dependencies: `pnpm install`
|
|
342
|
-
|
|
343
|
-
## License
|
|
70
|
+
- **Encryption**: XChaCha20-Poly1305 (256-bit)
|
|
71
|
+
- **Key Derivation**: Argon2id (OWASP recommended)
|
|
72
|
+
- **Storage**: Local SQLite with encrypted BLOBs
|
|
344
73
|
|
|
345
|
-
|
|
74
|
+
⚠️ **Store your password securely** - Loss means permanent data loss.
|
|
346
75
|
|
|
347
76
|
## Support
|
|
348
77
|
|
|
349
|
-
-
|
|
350
|
-
-
|
|
78
|
+
- [Documentation](https://github.com/PCIRCLE-AI/evidencemcp-server#readme)
|
|
79
|
+
- [Issues](https://github.com/PCIRCLE-AI/evidencemcp-server/issues)
|
|
80
|
+
- [License](https://github.com/PCIRCLE-AI/evidencemcp-server/blob/main/LICENSE)
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import type { ServerConfig } from './types.js';
|
|
3
3
|
/**
|
|
4
|
-
* EvidenceMCP Server
|
|
5
|
-
*
|
|
6
|
-
* Captures LLM conversations and stores them as encrypted evidence
|
|
4
|
+
* EvidenceMCP Server - Captures LLM conversations as encrypted evidence
|
|
7
5
|
* with Git timestamps and export capabilities.
|
|
8
6
|
*/
|
|
9
7
|
export declare class EvidenceMCPServer {
|
|
@@ -12,21 +10,9 @@ export declare class EvidenceMCPServer {
|
|
|
12
10
|
private db;
|
|
13
11
|
private derivedKey;
|
|
14
12
|
constructor(config: ServerConfig);
|
|
15
|
-
/**
|
|
16
|
-
* Derive encryption key from password (lazy initialization)
|
|
17
|
-
*/
|
|
18
13
|
private getDerivedKey;
|
|
19
|
-
/**
|
|
20
|
-
* Register MCP tools for evidence management
|
|
21
|
-
*/
|
|
22
14
|
private registerTools;
|
|
23
|
-
/**
|
|
24
|
-
* Register MCP resources for evidence access
|
|
25
|
-
*/
|
|
26
15
|
private registerResources;
|
|
27
|
-
/**
|
|
28
|
-
* Start the MCP server with stdio transport
|
|
29
|
-
*/
|
|
30
16
|
start(): Promise<void>;
|
|
31
17
|
}
|
|
32
18
|
export { EvidenceMCPTestHelpers } from './test-helpers.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAQA,OAAO,KAAK,EAAE,YAAY,EAAyB,MAAM,YAAY,CAAC;AAMtE;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,EAAE,CAAmB;IAC7B,OAAO,CAAC,UAAU,CAA2B;gBAEjC,MAAM,EAAE,YAAY;YAkBlB,aAAa;IAQ3B,OAAO,CAAC,aAAa;IAmNrB,OAAO,CAAC,iBAAiB;IA6BnB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B;AAwBD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,10 +5,11 @@ import { EvidenceDatabase, getCurrentCommit } from '@evidencemcp/storage';
|
|
|
5
5
|
import { deriveKey, encrypt, decrypt } from '@evidencemcp/crypto';
|
|
6
6
|
import * as z from 'zod';
|
|
7
7
|
import * as crypto from 'crypto';
|
|
8
|
+
function getErrorMessage(error) {
|
|
9
|
+
return error instanceof Error ? error.message : 'Unknown error';
|
|
10
|
+
}
|
|
8
11
|
/**
|
|
9
|
-
* EvidenceMCP Server
|
|
10
|
-
*
|
|
11
|
-
* Captures LLM conversations and stores them as encrypted evidence
|
|
12
|
+
* EvidenceMCP Server - Captures LLM conversations as encrypted evidence
|
|
12
13
|
* with Git timestamps and export capabilities.
|
|
13
14
|
*/
|
|
14
15
|
export class EvidenceMCPServer {
|
|
@@ -19,25 +20,18 @@ export class EvidenceMCPServer {
|
|
|
19
20
|
constructor(config) {
|
|
20
21
|
this.config = config;
|
|
21
22
|
try {
|
|
22
|
-
// Initialize database with error handling
|
|
23
23
|
this.db = new EvidenceDatabase(config.dbPath);
|
|
24
24
|
}
|
|
25
25
|
catch (error) {
|
|
26
|
-
|
|
27
|
-
throw new Error(`Failed to initialize database: ${errorMsg}`);
|
|
26
|
+
throw new Error(`Failed to initialize database: ${getErrorMessage(error)}`);
|
|
28
27
|
}
|
|
29
|
-
// Initialize MCP server
|
|
30
28
|
this.server = new McpServer({
|
|
31
29
|
name: config.name || 'traceguard-mcp',
|
|
32
30
|
version: config.version || '0.1.0'
|
|
33
31
|
});
|
|
34
|
-
// Register tools and resources (will implement in later steps)
|
|
35
32
|
this.registerTools();
|
|
36
33
|
this.registerResources();
|
|
37
34
|
}
|
|
38
|
-
/**
|
|
39
|
-
* Derive encryption key from password (lazy initialization)
|
|
40
|
-
*/
|
|
41
35
|
async getDerivedKey() {
|
|
42
36
|
if (!this.derivedKey) {
|
|
43
37
|
const result = await deriveKey(this.config.password);
|
|
@@ -45,11 +39,7 @@ export class EvidenceMCPServer {
|
|
|
45
39
|
}
|
|
46
40
|
return this.derivedKey;
|
|
47
41
|
}
|
|
48
|
-
/**
|
|
49
|
-
* Register MCP tools for evidence management
|
|
50
|
-
*/
|
|
51
42
|
registerTools() {
|
|
52
|
-
// Tool 1: capture-evidence
|
|
53
43
|
this.server.registerTool('capture-evidence', {
|
|
54
44
|
title: 'Capture Evidence',
|
|
55
45
|
description: 'Capture and encrypt LLM conversation as evidence',
|
|
@@ -68,24 +58,16 @@ export class EvidenceMCPServer {
|
|
|
68
58
|
}
|
|
69
59
|
}, async (params) => {
|
|
70
60
|
try {
|
|
71
|
-
// Input validation
|
|
72
61
|
if (!params.content || params.content.trim().length === 0) {
|
|
73
62
|
throw new Error('Content cannot be empty');
|
|
74
63
|
}
|
|
75
64
|
if (params.messageCount <= 0) {
|
|
76
65
|
throw new Error('Message count must be positive');
|
|
77
66
|
}
|
|
78
|
-
// Derive encryption key
|
|
79
67
|
const key = await this.getDerivedKey();
|
|
80
|
-
// Encrypt content
|
|
81
68
|
const encrypted = await encrypt(params.content, key);
|
|
82
|
-
// Get Git timestamp
|
|
83
69
|
const gitInfo = await getCurrentCommit();
|
|
84
|
-
|
|
85
|
-
const hash = crypto.createHash('sha256');
|
|
86
|
-
hash.update(params.content);
|
|
87
|
-
const contentHash = hash.digest('hex');
|
|
88
|
-
// Store evidence
|
|
70
|
+
const contentHash = crypto.createHash('sha256').update(params.content).digest('hex');
|
|
89
71
|
const id = this.db.create({
|
|
90
72
|
timestamp: new Date().toISOString(),
|
|
91
73
|
conversationId: params.conversationId,
|
|
@@ -98,26 +80,20 @@ export class EvidenceMCPServer {
|
|
|
98
80
|
gitTimestamp: gitInfo?.timestamp || null,
|
|
99
81
|
tags: params.tags || null
|
|
100
82
|
});
|
|
101
|
-
const output = {
|
|
102
|
-
id,
|
|
103
|
-
timestamp: new Date().toISOString(),
|
|
104
|
-
gitCommitHash: gitInfo?.commitHash || null,
|
|
105
|
-
success: true
|
|
106
|
-
};
|
|
107
83
|
return {
|
|
108
|
-
content: [{
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
84
|
+
content: [{ type: 'text', text: `Evidence captured successfully. ID: ${id}` }],
|
|
85
|
+
structuredContent: {
|
|
86
|
+
id,
|
|
87
|
+
timestamp: new Date().toISOString(),
|
|
88
|
+
gitCommitHash: gitInfo?.commitHash || null,
|
|
89
|
+
success: true
|
|
90
|
+
}
|
|
113
91
|
};
|
|
114
92
|
}
|
|
115
93
|
catch (error) {
|
|
116
|
-
|
|
117
|
-
throw new Error(`[Tool: capture-evidence] ${errorMsg}`);
|
|
94
|
+
throw new Error(`[Tool: capture-evidence] ${getErrorMessage(error)}`);
|
|
118
95
|
}
|
|
119
96
|
});
|
|
120
|
-
// Tool 2: list-evidences
|
|
121
97
|
this.server.registerTool('list-evidences', {
|
|
122
98
|
title: 'List Evidences',
|
|
123
99
|
description: 'List all captured evidence with pagination',
|
|
@@ -138,42 +114,30 @@ export class EvidenceMCPServer {
|
|
|
138
114
|
}
|
|
139
115
|
}, async (params) => {
|
|
140
116
|
try {
|
|
141
|
-
// Input validation
|
|
142
117
|
if (params.limit !== undefined && params.limit <= 0) {
|
|
143
118
|
throw new Error('Limit must be positive');
|
|
144
119
|
}
|
|
145
120
|
if (params.offset !== undefined && params.offset < 0) {
|
|
146
121
|
throw new Error('Offset cannot be negative');
|
|
147
122
|
}
|
|
148
|
-
const evidences = this.db.list({
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
llmProvider: e.llmProvider,
|
|
158
|
-
messageCount: e.messageCount,
|
|
159
|
-
tags: e.tags
|
|
160
|
-
})),
|
|
161
|
-
total: evidences.length
|
|
162
|
-
};
|
|
123
|
+
const evidences = this.db.list({ limit: params.limit, offset: params.offset });
|
|
124
|
+
const mappedEvidences = evidences.map(e => ({
|
|
125
|
+
id: e.id,
|
|
126
|
+
timestamp: e.timestamp,
|
|
127
|
+
conversationId: e.conversationId,
|
|
128
|
+
llmProvider: e.llmProvider,
|
|
129
|
+
messageCount: e.messageCount,
|
|
130
|
+
tags: e.tags
|
|
131
|
+
}));
|
|
163
132
|
return {
|
|
164
|
-
content: [{
|
|
165
|
-
|
|
166
|
-
text: `Found ${evidences.length} evidence(s)`
|
|
167
|
-
}],
|
|
168
|
-
structuredContent: output
|
|
133
|
+
content: [{ type: 'text', text: `Found ${evidences.length} evidence(s)` }],
|
|
134
|
+
structuredContent: { evidences: mappedEvidences, total: evidences.length }
|
|
169
135
|
};
|
|
170
136
|
}
|
|
171
137
|
catch (error) {
|
|
172
|
-
|
|
173
|
-
throw new Error(`[Tool: list-evidences] ${errorMsg}`);
|
|
138
|
+
throw new Error(`[Tool: list-evidences] ${getErrorMessage(error)}`);
|
|
174
139
|
}
|
|
175
140
|
});
|
|
176
|
-
// Tool 3: export-evidences
|
|
177
141
|
this.server.registerTool('export-evidences', {
|
|
178
142
|
title: 'Export Evidences',
|
|
179
143
|
description: 'Export evidences to encrypted ZIP archive',
|
|
@@ -190,33 +154,26 @@ export class EvidenceMCPServer {
|
|
|
190
154
|
}, async (params) => {
|
|
191
155
|
try {
|
|
192
156
|
const { exportEvidences } = await import('@evidencemcp/storage');
|
|
157
|
+
const fs = await import('fs');
|
|
193
158
|
const result = await exportEvidences(this.db, {
|
|
194
159
|
evidenceIds: params.evidenceIds,
|
|
195
160
|
includeGitInfo: params.includeGitInfo ?? false
|
|
196
161
|
});
|
|
197
|
-
// Write ZIP to file
|
|
198
|
-
const fs = await import('fs');
|
|
199
162
|
fs.writeFileSync(result.filename, result.zipData);
|
|
200
|
-
const output = {
|
|
201
|
-
filename: result.filename,
|
|
202
|
-
checksum: result.checksum,
|
|
203
|
-
evidenceCount: result.evidenceCount,
|
|
204
|
-
success: true
|
|
205
|
-
};
|
|
206
163
|
return {
|
|
207
|
-
content: [{
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
164
|
+
content: [{ type: 'text', text: `Exported ${result.evidenceCount} evidence(s) to ${result.filename}` }],
|
|
165
|
+
structuredContent: {
|
|
166
|
+
filename: result.filename,
|
|
167
|
+
checksum: result.checksum,
|
|
168
|
+
evidenceCount: result.evidenceCount,
|
|
169
|
+
success: true
|
|
170
|
+
}
|
|
212
171
|
};
|
|
213
172
|
}
|
|
214
173
|
catch (error) {
|
|
215
|
-
|
|
216
|
-
throw new Error(`[Tool: export-evidences] ${errorMsg}`);
|
|
174
|
+
throw new Error(`[Tool: export-evidences] ${getErrorMessage(error)}`);
|
|
217
175
|
}
|
|
218
176
|
});
|
|
219
|
-
// Tool 4: get-evidence
|
|
220
177
|
this.server.registerTool('get-evidence', {
|
|
221
178
|
title: 'Get Evidence',
|
|
222
179
|
description: 'Retrieve and decrypt specific evidence by ID',
|
|
@@ -242,81 +199,58 @@ export class EvidenceMCPServer {
|
|
|
242
199
|
if (!evidence) {
|
|
243
200
|
throw new Error(`Evidence not found: ${params.id}`);
|
|
244
201
|
}
|
|
245
|
-
// Decrypt content
|
|
246
|
-
const { decrypt } = await import('@evidencemcp/crypto');
|
|
247
202
|
const key = await this.getDerivedKey();
|
|
248
203
|
const decrypted = decrypt(evidence.encryptedContent, evidence.nonce, key);
|
|
249
|
-
const
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
conversationId: evidence.conversationId,
|
|
253
|
-
llmProvider: evidence.llmProvider,
|
|
254
|
-
content: decrypted,
|
|
255
|
-
messageCount: evidence.messageCount,
|
|
256
|
-
gitInfo: evidence.gitCommitHash ? {
|
|
257
|
-
commitHash: evidence.gitCommitHash,
|
|
258
|
-
timestamp: evidence.gitTimestamp
|
|
259
|
-
} : null,
|
|
260
|
-
tags: evidence.tags
|
|
261
|
-
};
|
|
204
|
+
const gitInfo = evidence.gitCommitHash
|
|
205
|
+
? { commitHash: evidence.gitCommitHash, timestamp: evidence.gitTimestamp }
|
|
206
|
+
: null;
|
|
262
207
|
return {
|
|
263
|
-
content: [{
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
208
|
+
content: [{ type: 'text', text: `Evidence ID: ${evidence.id}\nContent: ${decrypted.substring(0, 100)}...` }],
|
|
209
|
+
structuredContent: {
|
|
210
|
+
id: evidence.id,
|
|
211
|
+
timestamp: evidence.timestamp,
|
|
212
|
+
conversationId: evidence.conversationId,
|
|
213
|
+
llmProvider: evidence.llmProvider,
|
|
214
|
+
content: decrypted,
|
|
215
|
+
messageCount: evidence.messageCount,
|
|
216
|
+
gitInfo,
|
|
217
|
+
tags: evidence.tags
|
|
218
|
+
}
|
|
268
219
|
};
|
|
269
220
|
}
|
|
270
221
|
catch (error) {
|
|
271
|
-
|
|
272
|
-
throw new Error(`[Tool: get-evidence] ${errorMsg}`);
|
|
222
|
+
throw new Error(`[Tool: get-evidence] ${getErrorMessage(error)}`);
|
|
273
223
|
}
|
|
274
224
|
});
|
|
275
225
|
}
|
|
276
|
-
/**
|
|
277
|
-
* Register MCP resources for evidence access
|
|
278
|
-
*/
|
|
279
226
|
registerResources() {
|
|
280
|
-
// Resource: evidence://{id}
|
|
281
227
|
this.server.registerResource('evidence', new ResourceTemplate('evidence://{id}', { list: undefined }), {
|
|
282
228
|
title: 'Evidence Content',
|
|
283
229
|
description: 'Access encrypted evidence record by ID',
|
|
284
230
|
mimeType: 'text/plain'
|
|
285
231
|
}, async (uri, { id }) => {
|
|
286
232
|
try {
|
|
287
|
-
// Find evidence by ID
|
|
288
233
|
const evidence = this.db.findById(id);
|
|
289
234
|
if (!evidence) {
|
|
290
235
|
throw new Error(`Evidence with ID ${id} not found`);
|
|
291
236
|
}
|
|
292
|
-
// Decrypt content using correct 3-argument signature
|
|
293
237
|
const key = await this.getDerivedKey();
|
|
294
238
|
const decrypted = decrypt(evidence.encryptedContent, evidence.nonce, key);
|
|
295
239
|
return {
|
|
296
|
-
contents: [{
|
|
297
|
-
uri: uri.href,
|
|
298
|
-
mimeType: 'text/plain',
|
|
299
|
-
text: decrypted
|
|
300
|
-
}]
|
|
240
|
+
contents: [{ uri: uri.href, mimeType: 'text/plain', text: decrypted }]
|
|
301
241
|
};
|
|
302
242
|
}
|
|
303
243
|
catch (error) {
|
|
304
|
-
|
|
305
|
-
throw new Error(`Failed to access evidence resource: ${errorMsg}`);
|
|
244
|
+
throw new Error(`Failed to access evidence resource: ${getErrorMessage(error)}`);
|
|
306
245
|
}
|
|
307
246
|
});
|
|
308
247
|
}
|
|
309
|
-
/**
|
|
310
|
-
* Start the MCP server with stdio transport
|
|
311
|
-
*/
|
|
312
248
|
async start() {
|
|
313
249
|
const transport = new StdioServerTransport();
|
|
314
250
|
await this.server.connect(transport);
|
|
315
251
|
}
|
|
316
252
|
}
|
|
317
|
-
// CLI entry point
|
|
318
253
|
async function main() {
|
|
319
|
-
// Read config from environment variables
|
|
320
254
|
const config = {
|
|
321
255
|
dbPath: process.env.EVIDENCEMCP_DB_PATH || './evidence.db',
|
|
322
256
|
password: process.env.EVIDENCEMCP_PASSWORD || ''
|
|
@@ -328,13 +262,11 @@ async function main() {
|
|
|
328
262
|
const server = new EvidenceMCPServer(config);
|
|
329
263
|
await server.start();
|
|
330
264
|
}
|
|
331
|
-
// Run if called directly
|
|
332
265
|
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
333
266
|
main().catch((error) => {
|
|
334
267
|
console.error('Server error:', error);
|
|
335
268
|
process.exit(1);
|
|
336
269
|
});
|
|
337
270
|
}
|
|
338
|
-
// Export test helpers for testing
|
|
339
271
|
export { EvidenceMCPTestHelpers } from './test-helpers.js';
|
|
340
272
|
//# 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":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAGjC,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;AAClE,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,iBAAiB;IACpB,MAAM,CAAY;IAClB,MAAM,CAAe;IACrB,EAAE,CAAmB;IACrB,UAAU,GAAsB,IAAI,CAAC;IAE7C,YAAY,MAAoB;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,kCAAkC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9E,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC;YAC1B,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,gBAAgB;YACrC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,OAAO;SACnC,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,aAAa;QACzB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACrD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC;QAC/B,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,MAAM,CAAC,YAAY,CACtB,kBAAkB,EAClB;YACE,KAAK,EAAE,kBAAkB;YACzB,WAAW,EAAE,kDAAkD;YAC/D,WAAW,EAAE;gBACX,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;gBACtD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;gBAC/E,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;gBACnF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;gBACxE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;aACxE;YACD,YAAY,EAAE;gBACZ,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;gBACd,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;gBACrB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBACpC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;aACrB;SACF,EACD,KAAK,EAAE,MAA6B,EAAE,EAAE;YACtC,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC1D,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;gBAC7C,CAAC;gBACD,IAAI,MAAM,CAAC,YAAY,IAAI,CAAC,EAAE,CAAC;oBAC7B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;gBACpD,CAAC;gBAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvC,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACrD,MAAM,OAAO,GAAG,MAAM,gBAAgB,EAAE,CAAC;gBACzC,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAErF,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;oBACxB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,cAAc,EAAE,MAAM,CAAC,cAAc;oBACrC,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,gBAAgB,EAAE,SAAS,CAAC,UAAU;oBACtC,KAAK,EAAE,SAAS,CAAC,KAAK;oBACtB,WAAW;oBACX,YAAY,EAAE,MAAM,CAAC,YAAY;oBACjC,aAAa,EAAE,OAAO,EAAE,UAAU,IAAI,IAAI;oBAC1C,YAAY,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI;oBACxC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI;iBAC1B,CAAC,CAAC;gBAEH,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uCAAuC,EAAE,EAAE,EAAE,CAAC;oBAC9E,iBAAiB,EAAE;wBACjB,EAAE;wBACF,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;wBACnC,aAAa,EAAE,OAAO,EAAE,UAAU,IAAI,IAAI;wBAC1C,OAAO,EAAE,IAAI;qBACd;iBACF,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,4BAA4B,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACxE,CAAC;QACH,CAAC,CACF,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,YAAY,CACtB,gBAAgB,EAChB;YACE,KAAK,EAAE,gBAAgB;YACvB,WAAW,EAAE,4CAA4C;YACzD,WAAW,EAAE;gBACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;gBACzE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;aACzE;YACD,YAAY,EAAE;gBACZ,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;oBAC1B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;oBACd,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;oBACrB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;oBAC1B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;oBACvB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;oBACxB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;iBAC5B,CAAC,CAAC;gBACH,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;aAClB;SACF,EACD,KAAK,EAAE,MAA2C,EAAE,EAAE;YACpD,IAAI,CAAC;gBACH,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;oBACpD,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;gBAC5C,CAAC;gBACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrD,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;gBAC/C,CAAC;gBAED,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC/E,MAAM,eAAe,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC1C,EAAE,EAAE,CAAC,CAAC,EAAE;oBACR,SAAS,EAAE,CAAC,CAAC,SAAS;oBACtB,cAAc,EAAE,CAAC,CAAC,cAAc;oBAChC,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,YAAY,EAAE,CAAC,CAAC,YAAY;oBAC5B,IAAI,EAAE,CAAC,CAAC,IAAI;iBACb,CAAC,CAAC,CAAC;gBAEJ,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,SAAS,CAAC,MAAM,cAAc,EAAE,CAAC;oBAC1E,iBAAiB,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE;iBAC3E,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,0BAA0B,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACtE,CAAC;QACH,CAAC,CACF,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,YAAY,CACtB,kBAAkB,EAClB;YACE,KAAK,EAAE,kBAAkB;YACzB,WAAW,EAAE,2CAA2C;YACxD,WAAW,EAAE;gBACX,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;gBAClF,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;aAC1E;YACD,YAAY,EAAE;gBACZ,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;gBACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;gBACpB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;gBACzB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;aACrB;SACF,EACD,KAAK,EAAE,MAA4D,EAAE,EAAE;YACrE,IAAI,CAAC;gBACH,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;gBACjE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;gBAE9B,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE;oBAC5C,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,KAAK;iBAC/C,CAAC,CAAC;gBAEH,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBAElD,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,MAAM,CAAC,aAAa,mBAAmB,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;oBACvG,iBAAiB,EAAE;wBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,aAAa,EAAE,MAAM,CAAC,aAAa;wBACnC,OAAO,EAAE,IAAI;qBACd;iBACF,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,4BAA4B,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACxE,CAAC;QACH,CAAC,CACF,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,YAAY,CACtB,cAAc,EACd;YACE,KAAK,EAAE,cAAc;YACrB,WAAW,EAAE,8CAA8C;YAC3D,WAAW,EAAE;gBACX,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;aACvC;YACD,YAAY,EAAE;gBACZ,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;gBACd,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;gBACrB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;gBAC1B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;gBACvB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;gBACnB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;gBACxB,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;oBAChB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;oBACtB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;iBACtB,CAAC,CAAC,QAAQ,EAAE;gBACb,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC5B;SACF,EACD,KAAK,EAAE,MAAsB,EAAE,EAAE;YAC/B,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,MAAM,IAAI,KAAK,CAAC,uBAAuB,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtD,CAAC;gBAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvC,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,gBAAgB,EAAE,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAE1E,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa;oBACpC,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,aAAa,EAAE,SAAS,EAAE,QAAQ,CAAC,YAAa,EAAE;oBAC3E,CAAC,CAAC,IAAI,CAAC;gBAET,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,QAAQ,CAAC,EAAE,cAAc,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;oBAC5G,iBAAiB,EAAE;wBACjB,EAAE,EAAE,QAAQ,CAAC,EAAE;wBACf,SAAS,EAAE,QAAQ,CAAC,SAAS;wBAC7B,cAAc,EAAE,QAAQ,CAAC,cAAc;wBACvC,WAAW,EAAE,QAAQ,CAAC,WAAW;wBACjC,OAAO,EAAE,SAAS;wBAClB,YAAY,EAAE,QAAQ,CAAC,YAAY;wBACnC,OAAO;wBACP,IAAI,EAAE,QAAQ,CAAC,IAAI;qBACpB;iBACF,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,wBAAwB,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACpE,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAC1B,UAAU,EACV,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAC5D;YACE,KAAK,EAAE,kBAAkB;YACzB,WAAW,EAAE,wCAAwC;YACrD,QAAQ,EAAE,YAAY;SACvB,EACD,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;YACpB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAY,CAAC,CAAC;gBAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,MAAM,IAAI,KAAK,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC;gBACtD,CAAC;gBAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvC,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,gBAAgB,EAAE,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAE1E,OAAO;oBACL,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;iBACvE,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,uCAAuC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACnF,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;CACF;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAiB;QAC3B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,eAAe;QAC1D,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE;KACjD,CAAC;IAEF,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC;AAED,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACpD,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACrB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/test-helpers.d.ts
CHANGED
|
@@ -1,51 +1,33 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Test Helper Utilities for EvidenceMCP Server
|
|
3
|
-
*
|
|
4
|
-
* This module provides type-safe testing utilities without exposing
|
|
5
|
-
* internal implementation details through `as any` casts.
|
|
6
3
|
*/
|
|
7
4
|
import type { EvidenceMCPServer } from './index.js';
|
|
8
|
-
/**
|
|
9
|
-
* Tool information for testing
|
|
10
|
-
*/
|
|
11
5
|
export interface ToolInfo {
|
|
12
6
|
name: string;
|
|
13
7
|
description: string;
|
|
14
8
|
}
|
|
15
|
-
/**
|
|
16
|
-
* Resource information for testing
|
|
17
|
-
*/
|
|
18
9
|
export interface ResourceInfo {
|
|
19
10
|
name: string;
|
|
20
11
|
uriTemplate: string;
|
|
21
12
|
description: string;
|
|
22
13
|
mimeType: string;
|
|
23
14
|
}
|
|
24
|
-
/**
|
|
25
|
-
* Test Helpers for EvidenceMCP Server
|
|
26
|
-
*/
|
|
27
15
|
export declare class EvidenceMCPTestHelpers {
|
|
28
16
|
private server;
|
|
29
17
|
constructor(server: EvidenceMCPServer);
|
|
30
|
-
|
|
31
|
-
* Get list of registered tools (for testing)
|
|
32
|
-
*/
|
|
18
|
+
private getServerInternal;
|
|
33
19
|
getTools(): Promise<ToolInfo[]>;
|
|
34
|
-
/**
|
|
35
|
-
* Get list of registered resources (for testing)
|
|
36
|
-
*/
|
|
37
20
|
getResources(): Promise<ResourceInfo[]>;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
executeTool(toolName: string, params:
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
callTool(name: string, params: any): Promise<any>;
|
|
21
|
+
readResource(uri: string): Promise<{
|
|
22
|
+
contents: Array<{
|
|
23
|
+
uri: string;
|
|
24
|
+
mimeType: string;
|
|
25
|
+
text: string;
|
|
26
|
+
}>;
|
|
27
|
+
}>;
|
|
28
|
+
executeTool(toolName: string, params: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
29
|
+
callTool(name: string, params: Record<string, unknown>): Promise<{
|
|
30
|
+
structuredContent: Record<string, unknown>;
|
|
31
|
+
}>;
|
|
50
32
|
}
|
|
51
33
|
//# sourceMappingURL=test-helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../src/test-helpers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../src/test-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAuDD,qBAAa,sBAAsB;IACrB,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,iBAAiB;IAE7C,OAAO,CAAC,iBAAiB;IAInB,QAAQ,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAS/B,YAAY,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAiBvC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IA0BxG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAmBhG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;QAAE,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;CAIvH"}
|
package/dist/test-helpers.js
CHANGED
|
@@ -1,170 +1,108 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Test Helper Utilities for EvidenceMCP Server
|
|
3
|
-
*
|
|
4
|
-
* This module provides type-safe testing utilities without exposing
|
|
5
|
-
* internal implementation details through `as any` casts.
|
|
6
3
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
function getFromRegistry(registry, finder) {
|
|
5
|
+
if (!registry)
|
|
6
|
+
return null;
|
|
7
|
+
if (registry instanceof Map) {
|
|
8
|
+
for (const [key, value] of registry.entries()) {
|
|
9
|
+
const result = finder(key, value);
|
|
10
|
+
if (result)
|
|
11
|
+
return result;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
else if (Array.isArray(registry)) {
|
|
15
|
+
for (const item of registry) {
|
|
16
|
+
const result = finder(item.name, item);
|
|
17
|
+
if (result)
|
|
18
|
+
return result;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
else if (typeof registry === 'object') {
|
|
22
|
+
for (const [key, value] of Object.entries(registry)) {
|
|
23
|
+
const result = finder(key, value);
|
|
24
|
+
if (result)
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
12
29
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
*/
|
|
16
|
-
function extractFromRegistry(registry, mapExtractor, arrayExtractor, objectExtractor) {
|
|
17
|
-
if (!registry) {
|
|
30
|
+
function mapRegistry(registry, mapper) {
|
|
31
|
+
if (!registry)
|
|
18
32
|
return [];
|
|
33
|
+
if (registry instanceof Map) {
|
|
34
|
+
return Array.from(registry.entries()).map(([key, value]) => mapper(key, value));
|
|
19
35
|
}
|
|
20
|
-
// Check if it's a Map
|
|
21
|
-
if (registry instanceof Map || (registry && typeof registry.entries === 'function')) {
|
|
22
|
-
return mapExtractor(registry.entries());
|
|
23
|
-
}
|
|
24
|
-
// Check if it's an Array
|
|
25
36
|
if (Array.isArray(registry)) {
|
|
26
|
-
return
|
|
37
|
+
return registry.map((item) => mapper(item.name, item));
|
|
27
38
|
}
|
|
28
|
-
// Check if it's an Object
|
|
29
39
|
if (typeof registry === 'object') {
|
|
30
|
-
return
|
|
40
|
+
return Object.entries(registry).map(([key, value]) => mapper(key, value));
|
|
31
41
|
}
|
|
32
42
|
return [];
|
|
33
43
|
}
|
|
34
|
-
/**
|
|
35
|
-
* Test Helpers for EvidenceMCP Server
|
|
36
|
-
*/
|
|
37
44
|
export class EvidenceMCPTestHelpers {
|
|
38
45
|
server;
|
|
39
46
|
constructor(server) {
|
|
40
47
|
this.server = server;
|
|
41
48
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
49
|
+
getServerInternal() {
|
|
50
|
+
return this.server;
|
|
51
|
+
}
|
|
45
52
|
async getTools() {
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
return extractFromRegistry(tools,
|
|
49
|
-
// Map extractor
|
|
50
|
-
(entries) => Array.from(entries).map(([name, tool]) => ({
|
|
51
|
-
name,
|
|
52
|
-
description: tool.description || tool.title
|
|
53
|
-
})),
|
|
54
|
-
// Array extractor
|
|
55
|
-
(items) => items.map((tool) => ({
|
|
56
|
-
name: tool.name,
|
|
57
|
-
description: tool.description
|
|
58
|
-
})),
|
|
59
|
-
// Object extractor
|
|
60
|
-
(entries) => entries.map(([name, tool]) => ({
|
|
53
|
+
const tools = Reflect.get(this.getServerInternal().server, '_registeredTools');
|
|
54
|
+
return mapRegistry(tools, (name, tool) => ({
|
|
61
55
|
name,
|
|
62
|
-
description: tool.description || tool.title
|
|
63
|
-
}))
|
|
56
|
+
description: (tool.description || tool.title)
|
|
57
|
+
}));
|
|
64
58
|
}
|
|
65
|
-
/**
|
|
66
|
-
* Get list of registered resources (for testing)
|
|
67
|
-
*/
|
|
68
59
|
async getResources() {
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
return extractFromRegistry(templates,
|
|
72
|
-
// Map extractor
|
|
73
|
-
(entries) => Array.from(entries).map(([name, template]) => ({
|
|
60
|
+
const templates = Reflect.get(this.getServerInternal().server, '_registeredResourceTemplates');
|
|
61
|
+
return mapRegistry(templates, (name, template) => ({
|
|
74
62
|
name,
|
|
75
|
-
uriTemplate: template.
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
})),
|
|
86
|
-
// Object extractor
|
|
87
|
-
(entries) => entries.map(([name, template]) => ({
|
|
88
|
-
name,
|
|
89
|
-
uriTemplate: template.resourceTemplate?._uriTemplate?.template || template.uriTemplate || '',
|
|
90
|
-
description: template.metadata?.description || template.description || '',
|
|
91
|
-
mimeType: template.metadata?.mimeType || template.mimeType || 'text/plain'
|
|
92
|
-
})));
|
|
63
|
+
uriTemplate: template.resourceTemplate?._uriTemplate?.template
|
|
64
|
+
|| template.uriTemplate
|
|
65
|
+
|| '',
|
|
66
|
+
description: template.metadata?.description
|
|
67
|
+
|| template.description
|
|
68
|
+
|| '',
|
|
69
|
+
mimeType: template.metadata?.mimeType
|
|
70
|
+
|| template.mimeType
|
|
71
|
+
|| 'text/plain'
|
|
72
|
+
}));
|
|
93
73
|
}
|
|
94
|
-
/**
|
|
95
|
-
* Read a resource by URI (for testing)
|
|
96
|
-
*/
|
|
97
74
|
async readResource(uri) {
|
|
98
|
-
const
|
|
99
|
-
const templates = getRegistry(serverInternal.server, '_registeredResourceTemplates');
|
|
100
|
-
if (!templates) {
|
|
101
|
-
throw new Error('No resources registered');
|
|
102
|
-
}
|
|
103
|
-
// Parse URI to get resource name and ID
|
|
75
|
+
const templates = Reflect.get(this.getServerInternal().server, '_registeredResourceTemplates');
|
|
104
76
|
const match = uri.match(/^(\w+):\/\/(.+)$/);
|
|
105
77
|
if (!match) {
|
|
106
78
|
throw new Error('Unknown resource');
|
|
107
79
|
}
|
|
108
80
|
const [, resourceName, id] = match;
|
|
109
|
-
|
|
110
|
-
let handler = null;
|
|
111
|
-
if (templates instanceof Map) {
|
|
112
|
-
handler = templates.get(resourceName);
|
|
113
|
-
}
|
|
114
|
-
else if (Array.isArray(templates)) {
|
|
115
|
-
handler = templates.find((t) => t.name === resourceName);
|
|
116
|
-
}
|
|
117
|
-
else if (typeof templates === 'object') {
|
|
118
|
-
handler = templates[resourceName];
|
|
119
|
-
}
|
|
81
|
+
const handler = getFromRegistry(templates, (key, value) => key === resourceName ? value : null);
|
|
120
82
|
if (!handler) {
|
|
121
83
|
throw new Error('Unknown resource');
|
|
122
84
|
}
|
|
123
|
-
// The handler might be in readCallback or handler field
|
|
124
85
|
const handlerFn = handler.readCallback || handler.handler;
|
|
125
|
-
if (!handlerFn) {
|
|
86
|
+
if (!handlerFn || typeof handlerFn !== 'function') {
|
|
126
87
|
throw new Error('Unknown resource');
|
|
127
88
|
}
|
|
128
|
-
|
|
129
|
-
const result = await handlerFn({ href: uri }, { id });
|
|
130
|
-
return result;
|
|
89
|
+
return handlerFn({ href: uri }, { id });
|
|
131
90
|
}
|
|
132
|
-
/**
|
|
133
|
-
* Execute a tool by name (for testing)
|
|
134
|
-
*/
|
|
135
91
|
async executeTool(toolName, params) {
|
|
136
|
-
const
|
|
137
|
-
const tools = getRegistry(serverInternal.server, '_registeredTools');
|
|
92
|
+
const tools = Reflect.get(this.getServerInternal().server, '_registeredTools');
|
|
138
93
|
if (!tools) {
|
|
139
94
|
throw new Error('No tools registered');
|
|
140
95
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
if (tools instanceof Map) {
|
|
144
|
-
tool = tools.get(toolName);
|
|
145
|
-
}
|
|
146
|
-
else if (Array.isArray(tools)) {
|
|
147
|
-
tool = tools.find((t) => t.name === toolName);
|
|
148
|
-
}
|
|
149
|
-
else if (typeof tools === 'object') {
|
|
150
|
-
tool = tools[toolName];
|
|
151
|
-
}
|
|
152
|
-
if (!tool || !tool.handler) {
|
|
96
|
+
const tool = getFromRegistry(tools, (key, value) => key === toolName ? value : null);
|
|
97
|
+
if (!tool || !tool.handler || typeof tool.handler !== 'function') {
|
|
153
98
|
throw new Error(`Tool ${toolName} not found`);
|
|
154
99
|
}
|
|
155
|
-
// Execute the tool handler
|
|
156
100
|
const result = await tool.handler(params);
|
|
157
|
-
return result.structuredContent || result;
|
|
101
|
+
return (result.structuredContent || result);
|
|
158
102
|
}
|
|
159
|
-
/**
|
|
160
|
-
* Call a tool directly (for testing)
|
|
161
|
-
*/
|
|
162
103
|
async callTool(name, params) {
|
|
163
104
|
const result = await this.executeTool(name, params);
|
|
164
|
-
|
|
165
|
-
return {
|
|
166
|
-
structuredContent: result
|
|
167
|
-
};
|
|
105
|
+
return { structuredContent: result };
|
|
168
106
|
}
|
|
169
107
|
}
|
|
170
108
|
//# sourceMappingURL=test-helpers.js.map
|
package/dist/test-helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../src/test-helpers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../src/test-helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -26,29 +26,4 @@ export interface CaptureEvidenceParams {
|
|
|
26
26
|
/** Optional tags for categorization */
|
|
27
27
|
tags?: string;
|
|
28
28
|
}
|
|
29
|
-
/**
|
|
30
|
-
* Evidence list request parameters
|
|
31
|
-
*/
|
|
32
|
-
export interface ListEvidencesParams {
|
|
33
|
-
/** Maximum number of results */
|
|
34
|
-
limit?: number;
|
|
35
|
-
/** Offset for pagination */
|
|
36
|
-
offset?: number;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Evidence export request parameters
|
|
40
|
-
*/
|
|
41
|
-
export interface ExportEvidencesParams {
|
|
42
|
-
/** Specific evidence IDs to export (empty = all) */
|
|
43
|
-
evidenceIds?: string[];
|
|
44
|
-
/** Include git info in export */
|
|
45
|
-
includeGitInfo?: boolean;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Get evidence request parameters
|
|
49
|
-
*/
|
|
50
|
-
export interface GetEvidenceParams {
|
|
51
|
-
/** Evidence ID to retrieve */
|
|
52
|
-
id: string;
|
|
53
|
-
}
|
|
54
29
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IAEf,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IAEjB,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,gDAAgD;IAChD,cAAc,EAAE,MAAM,CAAC;IAEvB,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;IAEpB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAEhB,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAC;IAErB,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IAEf,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IAEjB,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,gDAAgD;IAChD,cAAc,EAAE,MAAM,CAAC;IAEvB,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;IAEpB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAEhB,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAC;IAErB,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pcircle/evidencemcp-server",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Model Context Protocol (MCP) server for EvidenceMCP - automatically capture and encrypt LLM conversations as legal evidence with Git timestamps",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mcp",
|