Skip to content

Listing resources from mcp server fails in mcp inspector because we don't return title. #210

@johns10

Description

@johns10

I fixed it naively on my fork like this:

diff --git a/lib/hermes/server.ex b/lib/hermes/server.ex
index 0354815..374efa0 100644
--- a/lib/hermes/server.ex
+++ b/lib/hermes/server.ex
@@ -467,7 +467,7 @@ defmodule Hermes.Server do
 
       # Register with auto-derived name
       component MyServer.Tools.Calculator
-      
+
       # Register with custom name
       component MyServer.Tools.FileManager, name: "files"
   """
@@ -591,6 +591,7 @@ defmodule Hermes.Server do
         %Resource{
           uri: mod.uri(),
           name: name,
+          title: Component.get_title(mod),
           description: Component.get_description(mod),
           mime_type: mod.mime_type(),
           handler: mod
@@ -830,7 +831,7 @@ defmodule Hermes.Server do
       ]
 
       model_preferences = %{"costPriority" => 1.0, "speedPriority" => 0.1, "hints" => [%{"name" => "claude"}]}
-      
+
       :ok = Hermes.Server.send_sampling_request(frame, messages,
         model_preferences: model_preferences,
         system_prompt: "You are a helpful assistant",
diff --git a/lib/hermes/server/component.ex b/lib/hermes/server/component.ex
index 991a6c2..160bfea 100644
--- a/lib/hermes/server/component.ex
+++ b/lib/hermes/server/component.ex
@@ -164,7 +164,7 @@ defmodule Hermes.Server.Component do
       # Simple field
       field :email, {:required, :string}, format: "email", description: "User's email address"
       field :age, :integer, description: "Age in years"
-      
+
       # Nested field
       field :user do
         field :name, {:required, :string}
@@ -315,6 +315,14 @@ defmodule Hermes.Server.Component do
     end
   end
 
+  def get_title(module) when is_atom(module) do
+    if function_exported?(module, :__title__, 0) do
+      module.__title__()
+    else
+      ""
+    end
+  end
+
   @doc """
   Gets the component type (:tool, :prompt, or :resource).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions