Fix weird type errors

This commit is contained in:
Gregory Schier
2026-01-02 07:10:48 -08:00
parent 7e239c0dd1
commit 04eec0ee05
4 changed files with 1931 additions and 2871 deletions

4737
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
import { StreamableHTTPTransport } from '@hono/mcp';
import { serve } from '@hono/node-server'; import { serve } from '@hono/node-server';
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { WebStandardStreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js';
import { Hono } from 'hono'; import { Hono } from 'hono';
import { registerFolderTools } from './tools/folder.js'; import { registerFolderTools } from './tools/folder.js';
import { registerHttpRequestTools } from './tools/httpRequest.js'; import { registerHttpRequestTools } from './tools/httpRequest.js';
@@ -10,49 +10,53 @@ 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) {
const server = new McpServer({ const mcpServer = new McpServer({
name: 'yaak-mcp-server', name: 'yaak-mcp-server',
version: '0.1.0', version: '0.1.0',
}); });
// Register all tools // Register all tools
registerToastTools(server, ctx); registerToastTools(mcpServer, ctx);
registerHttpRequestTools(server, ctx); registerHttpRequestTools(mcpServer, ctx);
registerFolderTools(server, ctx); registerFolderTools(mcpServer, ctx);
registerWindowTools(server, ctx); registerWindowTools(mcpServer, ctx);
registerWorkspaceTools(server, ctx); registerWorkspaceTools(mcpServer, ctx);
// Create a stateless transport
const transport = new WebStandardStreamableHTTPServerTransport();
// Create Hono app
const app = new Hono(); const app = new Hono();
const transport = new StreamableHTTPTransport();
// MCP endpoint - reuse the same transport for all requests app.all('/mcp', async (c) => {
app.all('/mcp', (c) => transport.handleRequest(c.req.raw)); if (!mcpServer.isConnected()) {
// Connect the mcp with the transport
// Connect server to transport await mcpServer.connect(transport);
server.connect(transport).then(() => { ctx.yaak.toast.show({
console.log(`MCP Server running at http://127.0.0.1:${port}/mcp`); message: `MCP Server connected`,
ctx.yaak.toast.show({ icon: 'info',
message: `MCP Server running on port ${port}`, color: 'info',
icon: 'check_circle', timeout: 5000,
color: 'success', });
}); }
return transport.handleRequest(c);
}); });
// Start the HTTP server
const honoServer = serve({ const honoServer = serve({
fetch: app.fetch,
port, port,
hostname: '127.0.0.1', hostname: '127.0.0.1',
fetch: app.fetch,
});
ctx.yaak.toast.show({
message: `MCP Server running on port ${honoServer.address}`,
icon: 'info',
color: 'info',
timeout: 30000,
}); });
return { return {
server, server: mcpServer,
close: async () => { close: async () => {
honoServer.close(); honoServer.close();
await server.close(); await mcpServer.close();
}, },
}; };
} }

View File

@@ -31,12 +31,12 @@ export function registerToastTools(server: McpServer, ctx: McpServerContext) {
{ {
title: 'Show Toast', title: 'Show Toast',
description: 'Show a toast notification in Yaak', description: 'Show a toast notification in Yaak',
inputSchema: z.object({ inputSchema: {
message: z.string().describe('The message to display'), message: z.string().describe('The message to display'),
icon: z.enum(ICON_VALUES).optional().describe('Icon name'), icon: z.enum(ICON_VALUES).optional().describe('Icon name'),
color: z.enum(COLOR_VALUES).optional().describe('Toast color'), color: z.enum(COLOR_VALUES).optional().describe('Toast color'),
timeout: z.number().optional().describe('Timeout in milliseconds'), timeout: z.number().optional().describe('Timeout in milliseconds'),
}), },
}, },
async ({ message, icon, color, timeout }) => { async ({ message, icon, color, timeout }) => {
await ctx.yaak.toast.show({ await ctx.yaak.toast.show({

View File

@@ -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';
import { getWorkspaceContext } from './helpers.js'; import { getWorkspaceContext } from './helpers.js';
@@ -9,7 +8,7 @@ export function registerWindowTools(server: McpServer, ctx: McpServerContext) {
{ {
title: 'Get Workspace ID', title: 'Get Workspace ID',
description: 'Get the current workspace ID', description: 'Get the current workspace ID',
inputSchema: z.object({}), inputSchema: {},
}, },
async () => { async () => {
const workspaceCtx = await getWorkspaceContext(ctx); const workspaceCtx = await getWorkspaceContext(ctx);
@@ -31,7 +30,7 @@ export function registerWindowTools(server: McpServer, ctx: McpServerContext) {
{ {
title: 'Get Environment ID', title: 'Get Environment ID',
description: 'Get the current environment ID', description: 'Get the current environment ID',
inputSchema: z.object({}), inputSchema: {},
}, },
async () => { async () => {
const workspaceCtx = await getWorkspaceContext(ctx); const workspaceCtx = await getWorkspaceContext(ctx);