mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-04-23 09:08:32 +02:00
Better MCP server lifecycle
This commit is contained in:
@@ -9,6 +9,7 @@ export const plugin: PluginDefinition = {
|
|||||||
async init(ctx: Context) {
|
async init(ctx: Context) {
|
||||||
// Start the server after waiting, so there's an active window open to do things
|
// Start the server after waiting, so there's an active window open to do things
|
||||||
// like show the startup toast.
|
// like show the startup toast.
|
||||||
|
console.log('Initializing MCP Server plugin');
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
mcpServer = createMcpServer({ yaak: ctx }, serverPort);
|
mcpServer = createMcpServer({ yaak: ctx }, serverPort);
|
||||||
}, 5000);
|
}, 5000);
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import { registerWorkspaceTools } from './tools/workspace.js';
|
|||||||
import type { McpServerContext } from './types.js';
|
import type { McpServerContext } from './types.js';
|
||||||
|
|
||||||
export function createMcpServer(ctx: McpServerContext, port: number) {
|
export function createMcpServer(ctx: McpServerContext, port: number) {
|
||||||
|
console.log('Creating MCP server on port', port);
|
||||||
const mcpServer = new McpServer({
|
const mcpServer = new McpServer({
|
||||||
name: 'yaak-mcp-server',
|
name: 'yaak-mcp-server',
|
||||||
version: '0.1.0',
|
version: '0.1.0',
|
||||||
@@ -39,23 +40,32 @@ export function createMcpServer(ctx: McpServerContext, port: number) {
|
|||||||
return transport.handleRequest(c);
|
return transport.handleRequest(c);
|
||||||
});
|
});
|
||||||
|
|
||||||
const honoServer = serve({
|
const honoServer = serve(
|
||||||
port,
|
{
|
||||||
hostname: '127.0.0.1',
|
port,
|
||||||
fetch: app.fetch,
|
hostname: '127.0.0.1',
|
||||||
});
|
fetch: app.fetch,
|
||||||
|
},
|
||||||
ctx.yaak.toast.show({
|
(info) => {
|
||||||
message: `MCP Server running on port ${honoServer.address}`,
|
console.log('Started MCP server on ', info.address);
|
||||||
icon: 'info',
|
ctx.yaak.toast.show({
|
||||||
color: 'info',
|
message: `MCP Server running on http://127.0.0.1:${info.port}`,
|
||||||
timeout: 30000,
|
icon: 'info',
|
||||||
});
|
color: 'secondary',
|
||||||
|
timeout: 10000,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
server: mcpServer,
|
server: mcpServer,
|
||||||
close: async () => {
|
close: async () => {
|
||||||
honoServer.close();
|
await new Promise<void>((resolve, reject) => {
|
||||||
|
honoServer.close((err) => {
|
||||||
|
if (err) reject(err);
|
||||||
|
else resolve();
|
||||||
|
});
|
||||||
|
});
|
||||||
await mcpServer.close();
|
await mcpServer.close();
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
||||||
import * as z from 'zod';
|
|
||||||
import type { McpServerContext } from '../types.js';
|
import type { McpServerContext } from '../types.js';
|
||||||
|
|
||||||
export function registerWorkspaceTools(server: McpServer, ctx: McpServerContext) {
|
export function registerWorkspaceTools(server: McpServer, ctx: McpServerContext) {
|
||||||
@@ -8,7 +7,6 @@ export function registerWorkspaceTools(server: McpServer, ctx: McpServerContext)
|
|||||||
{
|
{
|
||||||
title: 'List Workspaces',
|
title: 'List Workspaces',
|
||||||
description: 'List all open workspaces in Yaak',
|
description: 'List all open workspaces in Yaak',
|
||||||
inputSchema: z.object({}),
|
|
||||||
},
|
},
|
||||||
async () => {
|
async () => {
|
||||||
const workspaces = await ctx.yaak.workspace.list();
|
const workspaces = await ctx.yaak.workspace.list();
|
||||||
|
|||||||
Reference in New Issue
Block a user