Class: OmnifocusMcp::Resources::Base

Inherits:
FastMcp::Resource
  • Object
show all
Defined in:
lib/omnifocus_mcp/resources/base.rb

Overview

Shared superclass for OmniFocus MCP resources.

All resources serialize a Ruby object as pretty-printed JSON. Subclasses implement #payload to produce that Ruby object.

MCP resources return:

{ contents: [{ uri, mimeType: "application/json", text: pretty_json }] }

FastMcp::Server#handle_resources_read wraps the #content string with the equivalent contents envelope (see fast-mcp's resource.rb).

Instance Method Summary collapse

Instance Method Details

#contentObject



20
# File 'lib/omnifocus_mcp/resources/base.rb', line 20

def content = JSON.pretty_generate(camelize_keys(safe_payload))

#items_or_empty(result) ⇒ Object

Swallows failures into an empty array rather than surfacing an { error: ... } envelope. Used by aggregated resources (e.g. TodayResource) that bundle multiple queries and prefer a missing section to an inline error.



81
82
83
84
# File 'lib/omnifocus_mcp/resources/base.rb', line 81

def items_or_empty(result)
  result.map { |match| snake_case_keys(match.items || []) }
        .ok_or([])
end

#payloadObject

Subclasses must implement.

Returns:

  • (Object)

    anything JSON.pretty_generate can serialize

Raises:

  • (NotImplementedError)


24
# File 'lib/omnifocus_mcp/resources/base.rb', line 24

def payload = raise NotImplementedError, "#{self.class} must implement #payload"