Class: OmnifocusMcp::Resources::Base
- Inherits:
-
FastMcp::Resource
- Object
- FastMcp::Resource
- OmnifocusMcp::Resources::Base
- 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).
Direct Known Subclasses
FlaggedResource, InboxResource, PerspectiveResource, ProjectResource, StatsResource, TodayResource
Instance Method Summary collapse
- #content ⇒ Object
-
#items_or_empty(result) ⇒ Object
Swallows failures into an empty array rather than surfacing an ‘{ error: … }` envelope.
-
#payload ⇒ Object
Subclasses must implement.
Instance Method Details
#content ⇒ Object
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 |
#payload ⇒ Object
Subclasses must implement.
24 |
# File 'lib/omnifocus_mcp/resources/base.rb', line 24 def payload = raise NotImplementedError, "#{self.class} must implement #payload" |