Skip to main content
Glama

https://github.com/sammcj/mcp-package-version

by sammcj
mcp_official_schema_test.go4.01 kB
package server_test import ( "encoding/json" "testing" "github.com/mark3labs/mcp-go/mcp" "github.com/sirupsen/logrus" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) // TestToolsAgainstOfficialMCPSchema validates that all tools conform to the official MCP schema func TestToolsAgainstOfficialMCPSchema(t *testing.T) { // Skip since we can't access the tools directly from the server t.Skip("Skipping test since we can't access tools directly from MCP server") } // TestArrayParamsAgainstMCPSchema specifically validates array parameters against the MCP schema func TestArrayParamsAgainstMCPSchema(t *testing.T) { // Skip since we can't access the tools directly from the server t.Skip("Skipping test since we can't access tools directly from MCP server") } // TestIndividualToolSchemas tests specific tools directly func TestIndividualToolSchemas(t *testing.T) { // Create a logger for testing logger := logrus.New() logger.SetLevel(logrus.DebugLevel) // Create a Docker tool to test its schema dockerTool := mcp.NewTool("check_docker_tags", mcp.WithDescription("Check available tags for Docker container images"), mcp.WithString("image", mcp.Required(), mcp.Description("Docker image name"), ), mcp.WithArray("filterTags", mcp.Description("Array of regex patterns to filter tags"), mcp.Items(map[string]interface{}{"type": "string"}), ), ) t.Run("DockerToolSchema", func(t *testing.T) { // Marshal the schema to JSON schemaJSON, err := json.Marshal(dockerTool.InputSchema) require.NoError(t, err, "Failed to marshal Docker tool schema to JSON") // Parse the schema back for validation var schema map[string]interface{} err = json.Unmarshal(schemaJSON, &schema) require.NoError(t, err, "Failed to parse Docker tool schema") // Verify the schema structure assert.Equal(t, "object", schema["type"], "Schema should be object type") properties, ok := schema["properties"].(map[string]interface{}) require.True(t, ok, "Schema should have properties") // Check the filterTags property specifically filterTags, ok := properties["filterTags"].(map[string]interface{}) assert.True(t, ok, "Schema should have filterTags property") assert.Equal(t, "array", filterTags["type"], "filterTags should be an array") items, ok := filterTags["items"].(map[string]interface{}) assert.True(t, ok, "filterTags should have items property") assert.Equal(t, "string", items["type"], "filterTags items should be of type string") }) // Create a Python tool to test its schema pythonTool := mcp.NewTool("check_python_versions", mcp.WithDescription("Check latest stable versions for Python packages"), mcp.WithArray("requirements", mcp.Required(), mcp.Description("Array of requirements from requirements.txt"), mcp.Items(map[string]interface{}{"type": "string"}), ), ) t.Run("PythonToolSchema", func(t *testing.T) { // Marshal the schema to JSON schemaJSON, err := json.Marshal(pythonTool.InputSchema) require.NoError(t, err, "Failed to marshal Python tool schema to JSON") // Parse the schema back for validation var schema map[string]interface{} err = json.Unmarshal(schemaJSON, &schema) require.NoError(t, err, "Failed to parse Python tool schema") // Verify the schema structure assert.Equal(t, "object", schema["type"], "Schema should be object type") properties, ok := schema["properties"].(map[string]interface{}) require.True(t, ok, "Schema should have properties") // Check the requirements property specifically requirements, ok := properties["requirements"].(map[string]interface{}) assert.True(t, ok, "Schema should have requirements property") assert.Equal(t, "array", requirements["type"], "requirements should be an array") items, ok := requirements["items"].(map[string]interface{}) assert.True(t, ok, "requirements should have items property") assert.Equal(t, "string", items["type"], "requirements items should be of type string") }) }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sammcj/mcp-package-version'

If you have feedback or need assistance with the MCP directory API, please join our Discord server