update mcp
Some checks failed
Sync from Gitea (main→main, keep workflow) / mirror (push) Has been cancelled

This commit is contained in:
Zheyuan Wu
2026-03-20 01:58:49 -05:00
parent 24153a40b4
commit cd8705ad9e
6 changed files with 557 additions and 151 deletions

121
test/test-mcp-worker.mjs Normal file
View 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')