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 +4 -4
- data/CHANGELOG.md +20 -0
- data/Manifest.txt +1 -0
- data/lib/cf/mcp/public/logo.png +0 -0
- data/lib/cf/mcp/server.rb +7 -5
- data/lib/cf/mcp/tools/find_related.rb +2 -2
- data/lib/cf/mcp/tools/get_details.rb +3 -3
- data/lib/cf/mcp/tools/get_topic.rb +3 -3
- data/lib/cf/mcp/tools/list_category.rb +4 -4
- data/lib/cf/mcp/tools/list_topics.rb +4 -4
- data/lib/cf/mcp/tools/member_search.rb +3 -3
- data/lib/cf/mcp/tools/parameter_search.rb +3 -3
- data/lib/cf/mcp/tools/search_enums.rb +3 -3
- data/lib/cf/mcp/tools/search_functions.rb +3 -3
- data/lib/cf/mcp/tools/search_structs.rb +3 -3
- data/lib/cf/mcp/tools/search_tool.rb +3 -3
- data/lib/cf/mcp/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 195399f6d4f2c7d1ec73c2d09509cfb2ff5277beba85fa6fc02c1e82a014d8d7
|
|
4
|
+
data.tar.gz: 136d0ccffbfad51290e9e4ef3d0af0ad116176f35909f87c53e4032db34adbe8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
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}
|
|
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
|
-
|
|
125
|
+
filename = path.delete_prefix("/")
|
|
126
|
+
logo_path = File.join(public_dir, filename)
|
|
126
127
|
if File.exist?(logo_path)
|
|
127
|
-
|
|
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 = "
|
|
12
|
+
TITLE = "Find Related"
|
|
13
13
|
|
|
14
|
-
tool_name "
|
|
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 = "
|
|
12
|
+
TITLE = "Get Details"
|
|
13
13
|
|
|
14
|
-
tool_name "
|
|
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 `
|
|
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 = "
|
|
12
|
+
TITLE = "Get Topic"
|
|
13
13
|
|
|
14
|
-
tool_name "
|
|
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 `
|
|
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 = "
|
|
12
|
+
TITLE = "List Category"
|
|
13
13
|
|
|
14
|
-
tool_name "
|
|
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 `
|
|
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 `
|
|
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 = "
|
|
12
|
+
TITLE = "List Topics"
|
|
13
13
|
|
|
14
|
-
tool_name "
|
|
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 `
|
|
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 `
|
|
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 = "
|
|
12
|
+
TITLE = "Member Search"
|
|
13
13
|
|
|
14
|
-
tool_name "
|
|
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 `
|
|
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 = "
|
|
12
|
+
TITLE = "Parameter Search"
|
|
13
13
|
|
|
14
|
-
tool_name "
|
|
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 `
|
|
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 = "
|
|
14
|
+
TITLE = "Search Enums"
|
|
15
15
|
|
|
16
|
-
tool_name "
|
|
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 `
|
|
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 = "
|
|
14
|
+
TITLE = "Search Functions"
|
|
15
15
|
|
|
16
|
-
tool_name "
|
|
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 `
|
|
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 = "
|
|
14
|
+
TITLE = "Search Structs"
|
|
15
15
|
|
|
16
|
-
tool_name "
|
|
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 `
|
|
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 = "
|
|
14
|
+
TITLE = "Search"
|
|
15
15
|
|
|
16
|
-
tool_name "
|
|
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 `
|
|
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]
|
data/lib/cf/mcp/version.rb
CHANGED
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.
|
|
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
|