Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions packages/worker/src/mcp/mcp-registration-agent.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { type McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'
import { type McpCallerContext } from '@kody-internal/shared/chat.ts'

export type McpRegistrationAgent = {
server: McpServer
getEnv(): Env
getCallerContext(): McpCallerContext
requireDomain(): string
}
4 changes: 2 additions & 2 deletions packages/worker/src/mcp/register-resources.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { type MCP } from './index.ts'
import { type McpRegistrationAgent } from './mcp-registration-agent.ts'
import { registerGeneratedUiAppResource } from './resources/generated-ui-app-resource.ts'

export async function registerResources(agent: MCP) {
export async function registerResources(agent: McpRegistrationAgent) {
await registerGeneratedUiAppResource(agent)
}
4 changes: 2 additions & 2 deletions packages/worker/src/mcp/register-tools.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { type MCP } from './index.ts'
import { type McpRegistrationAgent } from './mcp-registration-agent.ts'
import { registerExecuteTool } from './tools/execute.ts'
import { registerOpenGeneratedUiTool } from './tools/open-generated-ui.ts'
import { registerSearchTool } from './tools/search.ts'

export async function registerTools(agent: MCP) {
export async function registerTools(agent: McpRegistrationAgent) {
await registerSearchTool(agent)
await registerExecuteTool(agent)
await registerOpenGeneratedUiTool(agent)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import {
generatedUiShellResourceUri,
renderGeneratedUiShellEntryPoint,
} from '#mcp/apps/generated-ui-shell-entry-point.ts'
import { type MCP } from '#mcp/index.ts'
import { type McpRegistrationAgent } from '#mcp/mcp-registration-agent.ts'
import { mcpResourcePath } from '../../mcp-auth.ts'

const generatedUiAppResource = {
Expand All @@ -20,7 +20,9 @@ const generatedUiAppResource = {
'Generic MCP App shell for rendering generated UI artifacts in MCP App compatible hosts.',
} as const

export async function registerGeneratedUiAppResource(agent: MCP) {
export async function registerGeneratedUiAppResource(
agent: McpRegistrationAgent,
) {
const requestBaseUrl = agent.requireDomain()
const appEnv = getEnv(agent.getEnv())
const appBaseUrl = getAppBaseUrl({
Expand Down
4 changes: 2 additions & 2 deletions packages/worker/src/mcp/tools/execute.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { type ToolAnnotations } from '@modelcontextprotocol/sdk/types.js'
import { z } from 'zod'
import { formatExecutionOutput } from '#mcp/executor.ts'
import { runCodemodeWithRegistry } from '#mcp/run-codemode-registry.ts'
import { type MCP } from '#mcp/index.ts'
import { type McpRegistrationAgent } from '#mcp/mcp-registration-agent.ts'
import {
callerContextFields,
errorFields,
Expand Down Expand Up @@ -62,7 +62,7 @@ Examples:
} satisfies ToolAnnotations,
} as const

export async function registerExecuteTool(agent: MCP) {
export async function registerExecuteTool(agent: McpRegistrationAgent) {
agent.server.registerTool(
executeTool.name,
{
Expand Down
4 changes: 2 additions & 2 deletions packages/worker/src/mcp/tools/open-generated-ui.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { registerAppTool } from '@modelcontextprotocol/ext-apps/server'
import { type ToolAnnotations } from '@modelcontextprotocol/sdk/types.js'
import { z } from 'zod'
import { generatedUiShellResourceUri } from '#mcp/apps/generated-ui-shell-entry-point.ts'
import { type MCP } from '#mcp/index.ts'
import { type McpRegistrationAgent } from '#mcp/mcp-registration-agent.ts'

const openGeneratedUiTool = {
name: 'open_generated_ui',
Expand Down Expand Up @@ -100,7 +100,7 @@ const inputSchema = z
path: ['code'],
})

export async function registerOpenGeneratedUiTool(agent: MCP) {
export async function registerOpenGeneratedUiTool(agent: McpRegistrationAgent) {
void agent
registerAppTool(
agent.server,
Expand Down
4 changes: 2 additions & 2 deletions packages/worker/src/mcp/tools/search.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { listMcpSkillsByUserId } from '#mcp/skills/mcp-skills-repo.ts'
import { type McpSkillRow } from '#mcp/skills/mcp-skills-types.ts'
import { listUiArtifactsByUserId } from '#mcp/ui-artifacts-repo.ts'
import { type UiArtifactRow } from '#mcp/ui-artifacts-types.ts'
import type { MCP } from '#mcp/index.ts'
import { type McpRegistrationAgent } from '#mcp/mcp-registration-agent.ts'
import {
getHomeConnectorStatus,
type HomeConnectorStatus,
Expand Down Expand Up @@ -130,7 +130,7 @@ export async function loadOptionalSearchRows(input: {
}
}

export async function registerSearchTool(agent: MCP) {
export async function registerSearchTool(agent: McpRegistrationAgent) {
agent.server.registerTool(
searchTool.name,
{
Expand Down
2 changes: 2 additions & 0 deletions packages/worker/src/test-support/cloudflare-workers-stub.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,5 @@ export class DurableObject<TEnv = unknown> {
this.env = env
}
}

export class RpcTarget {}
3 changes: 3 additions & 0 deletions vitest.node.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ import { rootDir, sharedProjectConfig } from './vitest-shared.ts'
export default mergeConfig(
sharedProjectConfig,
defineProject({
ssr: {
noExternal: ['@cloudflare/codemode'],
},
resolve: {
alias: [
{
Expand Down
Loading