cf-mcp 0.14.3 → 0.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f93636ad4c9468a80315d49368037c7e653e44d3227e66ddf3880c3bd658a04e
4
- data.tar.gz: 995a1c37a451572ca558c61f3c7036c1e485120d7d7f97ff7ba2301cf600f22b
3
+ metadata.gz: 195399f6d4f2c7d1ec73c2d09509cfb2ff5277beba85fa6fc02c1e82a014d8d7
4
+ data.tar.gz: 136d0ccffbfad51290e9e4ef3d0af0ad116176f35909f87c53e4032db34adbe8
5
5
  SHA512:
6
- metadata.gz: be375c2b81d73ea8b35cb1271ba0179484ea93d37664e1794a5757099c698d82281c6a193554bc81411e4e21b4218a35cbbf69d33f567c58f9d10bec73c4389c
7
- data.tar.gz: 05c74b135b578e6778913f80a5c7073f574ea59a02a4003b335686bd6e0aec8d8cc0402f6fc1dcce8c42c5e6f681397313c6902367eaf6315717e0e269b6767b
6
+ metadata.gz: 488b3588f45c40fc22a1ef6472a801b7eefff38c69c2bb2b9dd4d74f006ae7af878b5893bf61606e82f6a558ce5a5433fabc8ccfde848a8af5d8c1f21391170b
7
+ data.tar.gz: fab33790cd94cb57d26f4722f0c7c88ea9e54436e9e60dac805a1b3260160e0740fc388157700195eeb8cfcda77600e4345b15133ee87ce04ce668424195fdce
data/CHANGELOG.md CHANGED
@@ -5,6 +5,24 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.15.1] - 2026-01-26
9
+
10
+ ### Added
11
+
12
+ - PNG icon (262x218) as additional server icon option
13
+
14
+ ## [0.15.0] - 2026-01-26
15
+
16
+ ### Changed
17
+
18
+ - **BREAKING:** Removed `cf_` prefix from all tool names (e.g., `cf_search` is now `search`)
19
+ - **BREAKING:** Removed `CF: ` prefix from all tool titles (e.g., `CF: Search` is now `Search`)
20
+ - Renamed `CLAUDE.md` to `AGENTS.md` with `CLAUDE.md` referencing it
21
+
22
+ ### Added
23
+
24
+ - MCP Inspector usage instructions in README
25
+
8
26
  ## [0.14.3] - 2026-01-26
9
27
 
10
28
  ### Changed
@@ -187,6 +205,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
187
205
  - `cf_list_category` - List items by category
188
206
  - `cf_get_details` - Get full documentation by name
189
207
 
208
+ [0.15.1]: https://github.com/pusewicz/cf-mcp/compare/v0.15.0...v0.15.1
209
+ [0.15.0]: https://github.com/pusewicz/cf-mcp/compare/v0.14.3...v0.15.0
190
210
  [0.14.3]: https://github.com/pusewicz/cf-mcp/compare/v0.14.2...v0.14.3
191
211
  [0.14.2]: https://github.com/pusewicz/cf-mcp/compare/v0.14.1...v0.14.2
192
212
  [0.14.1]: https://github.com/pusewicz/cf-mcp/compare/v0.14.0...v0.14.1
data/Manifest.txt CHANGED
@@ -16,6 +16,7 @@ lib/cf/mcp/models/function_doc.rb
16
16
  lib/cf/mcp/models/struct_doc.rb
17
17
  lib/cf/mcp/models/topic_doc.rb
18
18
  lib/cf/mcp/parser.rb
19
+ lib/cf/mcp/public/logo.png
19
20
  lib/cf/mcp/public/logo.svg
20
21
  lib/cf/mcp/server.rb
21
22
  lib/cf/mcp/templates/index.erb
Binary file
data/lib/cf/mcp/server.rb CHANGED
@@ -61,7 +61,6 @@ module CF
61
61
 
62
62
  PROTOCOL_VERSION = "2025-06-18"
63
63
  WEBSITE_URL = ENV.fetch("FLY_APP_NAME", nil) ? "https://#{ENV["FLY_APP_NAME"]}.fly.dev" : "https://cf-mcp.fly.dev"
64
- LOGO_PATH = "/logo.svg"
65
64
  PUBLIC_DIR = File.join(__dir__, "public")
66
65
 
67
66
  def initialize(index)
@@ -74,7 +73,8 @@ module CF
74
73
  version: CF::MCP::VERSION,
75
74
  website_url: WEBSITE_URL,
76
75
  icons: [
77
- ::MCP::Icon.new(src: "#{WEBSITE_URL}#{LOGO_PATH}", mime_type: "image/svg+xml", sizes: ["any"])
76
+ ::MCP::Icon.new(src: "#{WEBSITE_URL}/logo.svg", mime_type: "image/svg+xml", sizes: ["any"]),
77
+ ::MCP::Icon.new(src: "#{WEBSITE_URL}/logo.png", mime_type: "image/png", sizes: ["262x218"])
78
78
  ],
79
79
  tools: TOOLS,
80
80
  resources: build_topic_resources(index)
@@ -120,11 +120,13 @@ module CF
120
120
  [404, {"content-type" => "application/json"}, ['{"error":"Not found"}']]
121
121
  when %r{^/http(/|$)}
122
122
  http_transport.handle_request(request)
123
- when "/logo.svg"
123
+ when "/logo.svg", "/logo.png"
124
124
  # Serve logo as static asset
125
- logo_path = File.join(public_dir, "logo.svg")
125
+ filename = path.delete_prefix("/")
126
+ logo_path = File.join(public_dir, filename)
126
127
  if File.exist?(logo_path)
127
- [200, {"content-type" => "image/svg+xml", "cache-control" => "public, max-age=86400"}, [File.read(logo_path)]]
128
+ content_type = filename.end_with?(".svg") ? "image/svg+xml" : "image/png"
129
+ [200, {"content-type" => content_type, "cache-control" => "public, max-age=86400"}, [File.read(logo_path, mode: "rb")]]
128
130
  else
129
131
  [404, {"content-type" => "text/plain"}, ["Not found"]]
130
132
  end
@@ -9,9 +9,9 @@ module CF
9
9
  class FindRelated < ::MCP::Tool
10
10
  extend ResponseHelpers
11
11
 
12
- TITLE = "CF: Find Related"
12
+ TITLE = "Find Related"
13
13
 
14
- tool_name "cf_find_related"
14
+ tool_name "find_related"
15
15
  title TITLE
16
16
  description "Find all items related to a given Cute Framework item (bidirectional relationship search)"
17
17
 
@@ -9,9 +9,9 @@ module CF
9
9
  class GetDetails < ::MCP::Tool
10
10
  extend ResponseHelpers
11
11
 
12
- TITLE = "CF: Get Details"
12
+ TITLE = "Get Details"
13
13
 
14
- tool_name "cf_get_details"
14
+ tool_name "get_details"
15
15
  title TITLE
16
16
  description "Get detailed documentation for a specific Cute Framework item by exact name"
17
17
 
@@ -57,7 +57,7 @@ module CF
57
57
  if related_topics.any?
58
58
  output += "\n\n## Related Topics\n"
59
59
  output += related_topics.map { |t| "- **#{t.name}** — #{t.brief}" }.join("\n")
60
- output += "\n\n**Tip:** Use `cf_get_topic` to read the full topic content."
60
+ output += "\n\n**Tip:** Use `get_topic` to read the full topic content."
61
61
  end
62
62
  end
63
63
 
@@ -9,9 +9,9 @@ module CF
9
9
  class GetTopic < ::MCP::Tool
10
10
  extend ResponseHelpers
11
11
 
12
- TITLE = "CF: Get Topic"
12
+ TITLE = "Get Topic"
13
13
 
14
- tool_name "cf_get_topic"
14
+ tool_name "get_topic"
15
15
  title TITLE
16
16
  description "Get the full content of a Cute Framework topic guide document"
17
17
 
@@ -44,7 +44,7 @@ module CF
44
44
  }
45
45
 
46
46
  if suggestions.empty?
47
- text_response("Topic not found: '#{name}'\n\nUse `cf_list_topics` to see available topics.")
47
+ text_response("Topic not found: '#{name}'\n\nUse `list_topics` to see available topics.")
48
48
  else
49
49
  formatted = suggestions.map { |t| "- **#{t.name}** — #{t.brief}" }.join("\n")
50
50
  text_response("Topic not found: '#{name}'\n\n**Similar topics:**\n#{formatted}")
@@ -9,9 +9,9 @@ module CF
9
9
  class ListCategory < ::MCP::Tool
10
10
  extend ResponseHelpers
11
11
 
12
- TITLE = "CF: List Category"
12
+ TITLE = "List Category"
13
13
 
14
- tool_name "cf_list_category"
14
+ tool_name "list_category"
15
15
  title TITLE
16
16
  description "List all items in a specific category, or list all available categories"
17
17
 
@@ -49,7 +49,7 @@ module CF
49
49
  .join(", ")
50
50
  "- **#{cat}** — #{items.size} items (#{type_breakdown})"
51
51
  end.join("\n")
52
- text_response("Available categories:\n\n#{formatted}\n\n**Tip:** Use `cf_list_category` with a category name to see all items in that category.")
52
+ text_response("Available categories:\n\n#{formatted}\n\n**Tip:** Use `list_category` with a category name to see all items in that category.")
53
53
  end
54
54
  else
55
55
  # List items in the specified category
@@ -73,7 +73,7 @@ module CF
73
73
  ""
74
74
  end
75
75
 
76
- text_response("Items in '#{category}':\n\n#{formatted}#{topic_suggestion}\n\n**Tip:** Use `cf_get_details` with an exact name to get full documentation.")
76
+ text_response("Items in '#{category}':\n\n#{formatted}#{topic_suggestion}\n\n**Tip:** Use `get_details` with an exact name to get full documentation.")
77
77
  end
78
78
  end
79
79
  end
@@ -9,9 +9,9 @@ module CF
9
9
  class ListTopics < ::MCP::Tool
10
10
  extend ResponseHelpers
11
11
 
12
- TITLE = "CF: List Topics"
12
+ TITLE = "List Topics"
13
13
 
14
- tool_name "cf_list_topics"
14
+ tool_name "list_topics"
15
15
  title TITLE
16
16
  description "List all Cute Framework topic guides, optionally filtered by category or in recommended reading order"
17
17
 
@@ -58,12 +58,12 @@ module CF
58
58
  end
59
59
 
60
60
  lines << ""
61
- lines << "**Tip:** Use `cf_get_topic` with a topic name to read the full content."
61
+ lines << "**Tip:** Use `get_topic` with a topic name to read the full content."
62
62
 
63
63
  text_response(lines.join("\n"))
64
64
  end
65
65
 
66
- CATEGORY_TIP = "Use `cf_list_topics` without a category to see all available topics."
66
+ CATEGORY_TIP = "Use `list_topics` without a category to see all available topics."
67
67
  end
68
68
  end
69
69
  end
@@ -9,9 +9,9 @@ module CF
9
9
  class MemberSearch < ::MCP::Tool
10
10
  extend ResponseHelpers
11
11
 
12
- TITLE = "CF: Member Search"
12
+ TITLE = "Member Search"
13
13
 
14
- tool_name "cf_member_search"
14
+ tool_name "member_search"
15
15
  title TITLE
16
16
  description "Search Cute Framework structs by member name or type"
17
17
 
@@ -72,7 +72,7 @@ module CF
72
72
  lines << ""
73
73
  end
74
74
 
75
- lines << "**Tip:** Use `cf_get_details` with a struct name for full documentation."
75
+ lines << "**Tip:** Use `get_details` with a struct name for full documentation."
76
76
 
77
77
  text_response(lines.join("\n"))
78
78
  end
@@ -9,9 +9,9 @@ module CF
9
9
  class ParameterSearch < ::MCP::Tool
10
10
  extend ResponseHelpers
11
11
 
12
- TITLE = "CF: Parameter Search"
12
+ TITLE = "Parameter Search"
13
13
 
14
- tool_name "cf_parameter_search"
14
+ tool_name "parameter_search"
15
15
  title TITLE
16
16
  description "Find Cute Framework functions by parameter or return type"
17
17
 
@@ -98,7 +98,7 @@ module CF
98
98
  lines << ""
99
99
  end
100
100
 
101
- lines << "**Tip:** Use `cf_get_details` with a function name for full documentation."
101
+ lines << "**Tip:** Use `get_details` with a function name for full documentation."
102
102
 
103
103
  text_response(lines.join("\n"))
104
104
  end
@@ -11,9 +11,9 @@ module CF
11
11
  extend ResponseHelpers
12
12
  extend SearchResultFormatter
13
13
 
14
- TITLE = "CF: Search Enums"
14
+ TITLE = "Search Enums"
15
15
 
16
- tool_name "cf_search_enums"
16
+ tool_name "search_enums"
17
17
  title TITLE
18
18
  description "Search Cute Framework enums"
19
19
 
@@ -35,7 +35,7 @@ module CF
35
35
  open_world_hint: false
36
36
  )
37
37
 
38
- DETAILS_TIP = "**Tip:** Use `cf_get_details` with an exact name to get full documentation including values and examples."
38
+ DETAILS_TIP = "**Tip:** Use `get_details` with an exact name to get full documentation including values and examples."
39
39
 
40
40
  def self.call(query:, category: nil, limit: 20, server_context: {})
41
41
  index = server_context[:index]
@@ -11,9 +11,9 @@ module CF
11
11
  extend ResponseHelpers
12
12
  extend SearchResultFormatter
13
13
 
14
- TITLE = "CF: Search Functions"
14
+ TITLE = "Search Functions"
15
15
 
16
- tool_name "cf_search_functions"
16
+ tool_name "search_functions"
17
17
  title TITLE
18
18
  description "Search Cute Framework functions"
19
19
 
@@ -35,7 +35,7 @@ module CF
35
35
  open_world_hint: false
36
36
  )
37
37
 
38
- DETAILS_TIP = "**Tip:** Use `cf_get_details` with an exact name to get full documentation including signature, parameters, and examples."
38
+ DETAILS_TIP = "**Tip:** Use `get_details` with an exact name to get full documentation including signature, parameters, and examples."
39
39
 
40
40
  def self.call(query:, category: nil, limit: 20, server_context: {})
41
41
  index = server_context[:index]
@@ -11,9 +11,9 @@ module CF
11
11
  extend ResponseHelpers
12
12
  extend SearchResultFormatter
13
13
 
14
- TITLE = "CF: Search Structs"
14
+ TITLE = "Search Structs"
15
15
 
16
- tool_name "cf_search_structs"
16
+ tool_name "search_structs"
17
17
  title TITLE
18
18
  description "Search Cute Framework structs"
19
19
 
@@ -35,7 +35,7 @@ module CF
35
35
  open_world_hint: false
36
36
  )
37
37
 
38
- DETAILS_TIP = "**Tip:** Use `cf_get_details` with an exact name to get full documentation including members and examples."
38
+ DETAILS_TIP = "**Tip:** Use `get_details` with an exact name to get full documentation including members and examples."
39
39
 
40
40
  def self.call(query:, category: nil, limit: 20, server_context: {})
41
41
  index = server_context[:index]
@@ -11,9 +11,9 @@ module CF
11
11
  extend ResponseHelpers
12
12
  extend SearchResultFormatter
13
13
 
14
- TITLE = "CF: Search"
14
+ TITLE = "Search"
15
15
 
16
- tool_name "cf_search"
16
+ tool_name "search"
17
17
  title TITLE
18
18
  description "Search Cute Framework documentation across all types (functions, structs, enums, topics)"
19
19
 
@@ -36,7 +36,7 @@ module CF
36
36
  open_world_hint: false
37
37
  )
38
38
 
39
- DETAILS_TIP = "**Tip:** Use `cf_get_details` for API items or `cf_get_topic` for topic guides to get full documentation."
39
+ DETAILS_TIP = "**Tip:** Use `get_details` for API items or `get_topic` for topic guides to get full documentation."
40
40
 
41
41
  def self.call(query:, type: nil, category: nil, limit: 20, server_context: {})
42
42
  index = server_context[:index]
@@ -2,6 +2,6 @@
2
2
 
3
3
  module CF
4
4
  module MCP
5
- VERSION = "0.14.3"
5
+ VERSION = "0.15.1"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cf-mcp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.3
4
+ version: 0.15.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Usewicz
@@ -106,6 +106,7 @@ files:
106
106
  - lib/cf/mcp/models/struct_doc.rb
107
107
  - lib/cf/mcp/models/topic_doc.rb
108
108
  - lib/cf/mcp/parser.rb
109
+ - lib/cf/mcp/public/logo.png
109
110
  - lib/cf/mcp/public/logo.svg
110
111
  - lib/cf/mcp/server.rb
111
112
  - lib/cf/mcp/templates/index.erb