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"