update mcp
Some checks failed
Sync from Gitea (main→main, keep workflow) / mirror (push) Has been cancelled
Some checks failed
Sync from Gitea (main→main, keep workflow) / mirror (push) Has been cancelled
This commit is contained in:
121
test/test-mcp-worker.mjs
Normal file
121
test/test-mcp-worker.mjs
Normal file
@@ -0,0 +1,121 @@
|
||||
import assert from 'node:assert/strict'
|
||||
import process from 'node:process'
|
||||
|
||||
import worker from '../mcp-worker/src/index.mjs'
|
||||
import { LATEST_PROTOCOL_VERSION } from '@modelcontextprotocol/sdk/types.js'
|
||||
|
||||
function makeJsonRequest(url, body, headers = {}) {
|
||||
return new Request(url, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
accept: 'application/json, text/event-stream',
|
||||
'content-type': 'application/json',
|
||||
...headers
|
||||
},
|
||||
body: JSON.stringify(body)
|
||||
})
|
||||
}
|
||||
|
||||
const baseUrl = 'https://example.com'
|
||||
|
||||
const healthResponse = await worker.fetch(new Request(`${baseUrl}/health`))
|
||||
assert.equal(healthResponse.status, 200)
|
||||
const healthJson = await healthResponse.json()
|
||||
assert.equal(healthJson.status, 'ok')
|
||||
assert.ok(healthJson.notes > 0)
|
||||
|
||||
const initializeResponse = await worker.fetch(makeJsonRequest(`${baseUrl}/mcp`, {
|
||||
jsonrpc: '2.0',
|
||||
id: 1,
|
||||
method: 'initialize',
|
||||
params: {
|
||||
protocolVersion: LATEST_PROTOCOL_VERSION,
|
||||
capabilities: {},
|
||||
clientInfo: {
|
||||
name: 'notenextra-worker-test',
|
||||
version: '1.0.0'
|
||||
}
|
||||
}
|
||||
}))
|
||||
|
||||
assert.equal(initializeResponse.status, 200)
|
||||
const sessionId = initializeResponse.headers.get('mcp-session-id')
|
||||
assert.ok(sessionId, 'initialize should return an MCP session ID')
|
||||
const protocolVersion = initializeResponse.headers.get('mcp-protocol-version') || LATEST_PROTOCOL_VERSION
|
||||
const initializeJson = await initializeResponse.json()
|
||||
assert.ok(initializeJson.result, 'initialize should return a result payload')
|
||||
|
||||
const toolListResponse = await worker.fetch(makeJsonRequest(`${baseUrl}/mcp`, {
|
||||
jsonrpc: '2.0',
|
||||
id: 2,
|
||||
method: 'tools/list',
|
||||
params: {}
|
||||
}, {
|
||||
'mcp-protocol-version': protocolVersion,
|
||||
'mcp-session-id': sessionId
|
||||
}))
|
||||
|
||||
assert.equal(toolListResponse.status, 200)
|
||||
const toolListJson = await toolListResponse.json()
|
||||
const toolNames = toolListJson.result.tools.map((tool) => tool.name).sort()
|
||||
assert.deepEqual(toolNames, ['list_notes', 'read_note', 'search_notes'])
|
||||
|
||||
const listNotesResponse = await worker.fetch(makeJsonRequest(`${baseUrl}/mcp`, {
|
||||
jsonrpc: '2.0',
|
||||
id: 3,
|
||||
method: 'tools/call',
|
||||
params: {
|
||||
name: 'list_notes',
|
||||
arguments: {
|
||||
course: 'CSE442T'
|
||||
}
|
||||
}
|
||||
}, {
|
||||
'mcp-protocol-version': protocolVersion,
|
||||
'mcp-session-id': sessionId
|
||||
}))
|
||||
|
||||
assert.equal(listNotesResponse.status, 200)
|
||||
const listNotesJson = await listNotesResponse.json()
|
||||
assert.match(listNotesJson.result.content[0].text, /CSE442T\/CSE442T_L1/)
|
||||
|
||||
const readNoteResponse = await worker.fetch(makeJsonRequest(`${baseUrl}/mcp`, {
|
||||
jsonrpc: '2.0',
|
||||
id: 4,
|
||||
method: 'tools/call',
|
||||
params: {
|
||||
name: 'read_note',
|
||||
arguments: {
|
||||
noteId: 'about'
|
||||
}
|
||||
}
|
||||
}, {
|
||||
'mcp-protocol-version': protocolVersion,
|
||||
'mcp-session-id': sessionId
|
||||
}))
|
||||
|
||||
assert.equal(readNoteResponse.status, 200)
|
||||
const readNoteJson = await readNoteResponse.json()
|
||||
assert.match(readNoteJson.result.content[0].text, /This is a static server for me to share my notes/i)
|
||||
|
||||
const searchResponse = await worker.fetch(makeJsonRequest(`${baseUrl}/mcp`, {
|
||||
jsonrpc: '2.0',
|
||||
id: 5,
|
||||
method: 'tools/call',
|
||||
params: {
|
||||
name: 'search_notes',
|
||||
arguments: {
|
||||
query: "Kerckhoffs' principle",
|
||||
limit: 3
|
||||
}
|
||||
}
|
||||
}, {
|
||||
'mcp-protocol-version': protocolVersion,
|
||||
'mcp-session-id': sessionId
|
||||
}))
|
||||
|
||||
assert.equal(searchResponse.status, 200)
|
||||
const searchJson = await searchResponse.json()
|
||||
assert.match(searchJson.result.content[0].text, /CSE442T\/CSE442T_L1/)
|
||||
|
||||
process.stdout.write('MCP worker test passed.\n')
|
||||
Reference in New Issue
Block a user