Skip to content

Latest commit

 

History

History
49 lines (35 loc) · 2.49 KB

File metadata and controls

49 lines (35 loc) · 2.49 KB

MCP Resources Implementation Analysis for Apify MCP Server

Executive Summary

The current MCP resources implementation is intentionally minimal and uses the low-level MCP Server API. Resources are exposed only to prevent client failures and to support existing UI widgets and the Skyfire usage guide. There is no use of registerResource or ResourceTemplate because the codebase does not use the high-level McpServer API. Resource listing and reading are handled directly via request handlers.

Current Architecture Overview

MCP Server Structure

  • ActorsMcpServer (src/mcp/server.ts) wraps the low-level MCP Server.
  • Resources are declared in capabilities (empty object) to prevent failures in clients that expect resource support.
  • Resource handling is implemented via setRequestHandler for:
    • ListResourcesRequestSchema
    • ReadResourceRequestSchema
    • ListResourceTemplatesRequestSchema (returns empty list)

Existing Resource Types

  1. Skyfire usage guide

    • Enabled only when skyfireMode is true.
    • URI: file://readme.md
    • Contents come from SKYFIRE_README_CONTENT.
  2. OpenAI UI widgets

    • Enabled only when uiMode === "openai".
    • URI prefix: ui://widget/
    • Resource list and reads are driven by availableWidgets.
    • Read handler loads widget JS from disk and wraps it in an HTML page.

Resource Templates

No templates are currently provided. ListResourceTemplatesRequestSchema always returns an empty list.

Constraints and Non-Negotiables

  • Do not use registerResource: This repository uses the low-level Server API, not the high-level McpServer API.
  • Keep resource handling explicit: Resource listing and reading must be handled via request handlers.
  • No new resources in this phase: Only existing resources are in scope (Skyfire usage guide and UI widgets).

Gaps and Risks

  • Monolithic handler: Resource logic is embedded in ActorsMcpServer.setupResourceHandlers, which makes extension harder.
  • No resource registry: There is no common interface for listing and reading resources; each resource type is handled inline.
  • No subscriptions or notifications: The server does not provide subscribe, unsubscribe, or notifications/resources/* handling.
  • No templates: Dynamic resources via URI templates are not supported.

References

  • Official MCP TypeScript SDK: /home/jirka/github/typescript-sdk
  • Example server implementing full MCP specs: /home/jirka/github/servers/src/everything