Skip to content

MCP Server Initialization Failure: Enum Tag Validation Error #4

@fakebizprez

Description

@fakebizprez

I’m trying to create a HTTP MCP server w/ the go SDK.

Please analyze these testing logs:

“host”:

fakebizprez@scum-studio: /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP git:(feature-rich) ✗ 
➜   ./twenty-crm-mcp-server
2025/10/19 03:04:10 Starting Twenty CRM MCP HTTP Server on 0.0.0.0:8080
2025/10/19 03:04:10 MCP endpoint: http://0.0.0.0:8080/mcp
2025/10/19 03:04:22 http: panic serving [::1]:55176: AddTool: tool "create_task": input schema: ForType(tools.CreateTaskInput): tag must not begin with 'WORD=': "enum=TODO,enum=IN_PROGRESS,enum=DONE"
goroutine 38 [running]:
net/http.(*conn).serve.func1()
        /opt/homebrew/Cellar/go/1.25.3/libexec/src/net/http/server.go:1943 +0xb4
panic({0x104763e40?, 0x140003da120?})
        /opt/homebrew/Cellar/go/1.25.3/libexec/src/runtime/panic.go:783 +0x120
github.com/modelcontextprotocol/go-sdk/mcp.AddTool[...](0x140001ce180?, 0x1400003b908, 0x0)
        /Users/fakebizprez/go/pkg/mod/github.com/modelcontextprotocol/[email protected]/mcp/server.go:400 +0xbc
github.com/linehaul/twenty-crm-mcp-http/internal/tools.RegisterTaskTools(0x140001ce180, 0x140001efd10)
        /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP/internal/tools/tasks.go:32 +0xb0
github.com/linehaul/twenty-crm-mcp-http/internal/server.NewMCPServer(0x140001efd10)
        /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP/internal/server/server.go:24 +0x8c
main.main.func1(0x14000258210?)
        /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP/cmd/server/main.go:45 +0x20
github.com/modelcontextprotocol/go-sdk/mcp.(*StreamableHTTPHandler).ServeHTTP(0x140001efda0, {0x1048215f0, 0x1400020e0f0}, 0x140001f63c0)
        /Users/fakebizprez/go/pkg/mod/github.com/modelcontextprotocol/[email protected]/mcp/streamable.go:215 +0x7e0
net/http.serverHandler.ServeHTTP({0x10481ff88?}, {0x1048215f0?, 0x1400020e0f0?}, 0x1?)
        /opt/homebrew/Cellar/go/1.25.3/libexec/src/net/http/server.go:3340 +0xb0
net/http.(*conn).serve(0x140001e25a0, {0x1048226b8, 0x140002580f0})
        /opt/homebrew/Cellar/go/1.25.3/libexec/src/net/http/server.go:2109 +0x528
created by net/http.(*Server).Serve in goroutine 35
        /opt/homebrew/Cellar/go/1.25.3/libexec/src/net/http/server.go:3493 +0x384
2025/10/19 03:04:31 http: panic serving [::1]:55179: AddTool: tool "create_task": input schema: ForType(tools.CreateTaskInput): tag must not begin with 'WORD=': "enum=TODO,enum=IN_PROGRESS,enum=DONE"
goroutine 40 [running]:
net/http.(*conn).serve.func1()
        /opt/homebrew/Cellar/go/1.25.3/libexec/src/net/http/server.go:1943 +0xb4
panic({0x104763e40?, 0x1400048d120?})
        /opt/homebrew/Cellar/go/1.25.3/libexec/src/runtime/panic.go:783 +0x120
github.com/modelcontextprotocol/go-sdk/mcp.AddTool[...](0x140001ce240?, 0x1400003b908, 0x0)
        /Users/fakebizprez/go/pkg/mod/github.com/modelcontextprotocol/[email protected]/mcp/server.go:400 +0xbc
github.com/linehaul/twenty-crm-mcp-http/internal/tools.RegisterTaskTools(0x140001ce240, 0x140001efd10)
        /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP/internal/tools/tasks.go:32 +0xb0
github.com/linehaul/twenty-crm-mcp-http/internal/server.NewMCPServer(0x140001efd10)
        /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP/internal/server/server.go:24 +0x8c
main.main.func1(0x140003ceae0?)
        /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP/cmd/server/main.go:45 +0x20
github.com/modelcontextprotocol/go-sdk/mcp.(*StreamableHTTPHandler).ServeHTTP(0x140001efda0, {0x1048215f0, 0x1400020e4b0}, 0x140001f6dc0)
        /Users/fakebizprez/go/pkg/mod/github.com/modelcontextprotocol/[email protected]/mcp/streamable.go:215 +0x7e0
net/http.serverHandler.ServeHTTP({0x10481ff88?}, {0x1048215f0?, 0x1400020e4b0?}, 0x1?)
        /opt/homebrew/Cellar/go/1.25.3/libexec/src/net/http/server.go:3340 +0xb0
net/http.(*conn).serve(0x140003d6630, {0x1048226b8, 0x140002580f0})
        /opt/homebrew/Cellar/go/1.25.3/libexec/src/net/http/server.go:2109 +0x528
created by net/http.(*Server).Serve in goroutine 35
        /opt/homebrew/Cellar/go/1.25.3/libexec/src/net/http/server.go:3493 +0x384
2025/10/19 03:04:40 http: panic serving [::1]:55184: AddTool: tool "create_task": input schema: ForType(tools.CreateTaskInput): tag must not begin with 'WORD=': "enum=TODO,enum=IN_PROGRESS,enum=DONE"
goroutine 19 [running]:
net/http.(*conn).serve.func1()
        /opt/homebrew/Cellar/go/1.25.3/libexec/src/net/http/server.go:1943 +0xb4
panic({0x104763e40?, 0x14000322c90?})
        /opt/homebrew/Cellar/go/1.25.3/libexec/src/runtime/panic.go:783 +0x120
github.com/modelcontextprotocol/go-sdk/mcp.AddTool[...](0x140001ce000?, 0x1400003b908, 0x0)
        /Users/fakebizprez/go/pkg/mod/github.com/modelcontextprotocol/[email protected]/mcp/server.go:400 +0xbc
github.com/linehaul/twenty-crm-mcp-http/internal/tools.RegisterTaskTools(0x140001ce000, 0x140001efd10)
        /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP/internal/tools/tasks.go:32 +0xb0
github.com/linehaul/twenty-crm-mcp-http/internal/server.NewMCPServer(0x140001efd10)
        /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP/internal/server/server.go:24 +0x8c
main.main.func1(0x140001efcb0?)
        /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP/cmd/server/main.go:45 +0x20
github.com/modelcontextprotocol/go-sdk/mcp.(*StreamableHTTPHandler).ServeHTTP(0x140001efda0, {0x1048215f0, 0x1400020e000}, 0x14000000140)
        /Users/fakebizprez/go/pkg/mod/github.com/modelcontextprotocol/[email protected]/mcp/streamable.go:215 +0x7e0
net/http.serverHandler.ServeHTTP({0x10481ff88?}, {0x1048215f0?, 0x1400020e000?}, 0x1?)
        /opt/homebrew/Cellar/go/1.25.3/libexec/src/net/http/server.go:3340 +0xb0
net/http.(*conn).serve(0x1400041a990, {0x1048226b8, 0x140002580f0})
        /opt/homebrew/Cellar/go/1.25.3/libexec/src/net/http/server.go:2109 +0x528
created by net/http.(*Server).Serve in goroutine 35
        /opt/homebrew/Cellar/go/1.25.3/libexec/src/net/http/server.go:3493 +0x384

“client”:

fakebizprez@scum-studio: /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP git:(feature-rich) ✗ 
➜    # Test 1: Initialize
  curl -X POST http://localhost:8080 \                                                                                                                                   
    -H "Content-Type: application/json" \
fakebizprez@scum-studio: /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP git:(feature-rich) ✗ 
➜     curl -X POST http://localhost:8080 \
>     -H "Content-Type: application/json" \
>     -d '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0.0"}},"id":1}'
curl: (52) Empty reply from server
fakebizprez@scum-studio: /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP git:(feature-rich) ✗ 
➜   # Test 2: List tools
  curl -X POST http://localhost:8080 \                                                                                                                                   
    -H "Content-Type: application/json" \
fakebizprez@scum-studio: /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP git:(feature-rich) ✗ 
➜     curl -X POST http://localhost:8080 \
>     -H "Content-Type: application/json" \
>     -d '{"jsonrpc":"2.0","method":"tools/list","params":{},"id":2}'
curl: (52) Empty reply from server
fakebizprez@scum-studio: /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP git:(feature-rich) ✗ 
➜   # Test 3: Call search_contacts
  curl -X POST http://localhost:8080 \                                                                                                                                   
    -H "Content-Type: application/json" \
fakebizprez@scum-studio: /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP git:(feature-rich) ✗ 
➜     curl -X POST http://localhost:8080 \
>     -H "Content-Type: application/json" \
>     -d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"search_contacts","arguments":{"query":"test","limit":5}},"id":3}'
curl: (52) Empty reply from server
fakebizprez@scum-studio: /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP git:(feature-rich) ✗ 

Use context7 mcp server to lookup. any of the Twenty or MCP GO SDK documentation

Agent Context { "tasks": [ { "id": "1177b34b-4329-4921-841d-31f475d6a851", "taskIndex": 0, "request": "[original issue]\n**MCP Server Initialization Failure: Enum Tag Validation Error**\nI’m trying to create a HTTP MCP server w/ the go SDK. \n\nPlease analyze these testing logs:\n\n“host”:\n```\nfakebizprez@scum-studio: /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP git:(feature-rich) ✗ \n➜ ./twenty-crm-mcp-server\n2025/10/19 03:04:10 Starting Twenty CRM MCP HTTP Server on 0.0.0.0:8080\n2025/10/19 03:04:10 MCP endpoint: http://0.0.0.0:8080/mcp\n2025/10/19 03:04:22 http: panic serving [::1]:55176: AddTool: tool \"create_task\": input schema: ForType(tools.CreateTaskInput): tag must not begin with 'WORD=': \"enum=TODO,enum=IN_PROGRESS,enum=DONE\"\ngoroutine 38 [running]:\nnet/http.(*conn).serve.func1()\n /opt/homebrew/Cellar/go/1.25.3/libexec/src/net/http/server.go:1943 +0xb4\npanic({0x104763e40?, 0x140003da120?})\n /opt/homebrew/Cellar/go/1.25.3/libexec/src/runtime/panic.go:783 +0x120\ngithub.com/modelcontextprotocol/go-sdk/mcp.AddTool[...](0x140001ce180?, 0x1400003b908, 0x0)\n /Users/fakebizprez/go/pkg/mod/github.com/modelcontextprotocol/[email protected]/mcp/server.go:400 +0xbc\ngithub.com/linehaul/twenty-crm-mcp-http/internal/tools.RegisterTaskTools(0x140001ce180, 0x140001efd10)\n /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP/internal/tools/tasks.go:32 +0xb0\ngithub.com/linehaul/twenty-crm-mcp-http/internal/server.NewMCPServer(0x140001efd10)\n /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP/internal/server/server.go:24 +0x8c\nmain.main.func1(0x14000258210?)\n /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP/cmd/server/main.go:45 +0x20\ngithub.com/modelcontextprotocol/go-sdk/mcp.(*StreamableHTTPHandler).ServeHTTP(0x140001efda0, {0x1048215f0, 0x1400020e0f0}, 0x140001f63c0)\n /Users/fakebizprez/go/pkg/mod/github.com/modelcontextprotocol/[email protected]/mcp/streamable.go:215 +0x7e0\nnet/http.serverHandler.ServeHTTP({0x10481ff88?}, {0x1048215f0?, 0x1400020e0f0?}, 0x1?)\n /opt/homebrew/Cellar/go/1.25.3/libexec/src/net/http/server.go:3340 +0xb0\nnet/http.(*conn).serve(0x140001e25a0, {0x1048226b8, 0x140002580f0})\n /opt/homebrew/Cellar/go/1.25.3/libexec/src/net/http/server.go:2109 +0x528\ncreated by net/http.(*Server).Serve in goroutine 35\n /opt/homebrew/Cellar/go/1.25.3/libexec/src/net/http/server.go:3493 +0x384\n2025/10/19 03:04:31 http: panic serving [::1]:55179: AddTool: tool \"create_task\": input schema: ForType(tools.CreateTaskInput): tag must not begin with 'WORD=': \"enum=TODO,enum=IN_PROGRESS,enum=DONE\"\ngoroutine 40 [running]:\nnet/http.(*conn).serve.func1()\n /opt/homebrew/Cellar/go/1.25.3/libexec/src/net/http/server.go:1943 +0xb4\npanic({0x104763e40?, 0x1400048d120?})\n /opt/homebrew/Cellar/go/1.25.3/libexec/src/runtime/panic.go:783 +0x120\ngithub.com/modelcontextprotocol/go-sdk/mcp.AddTool[...](0x140001ce240?, 0x1400003b908, 0x0)\n /Users/fakebizprez/go/pkg/mod/github.com/modelcontextprotocol/[email protected]/mcp/server.go:400 +0xbc\ngithub.com/linehaul/twenty-crm-mcp-http/internal/tools.RegisterTaskTools(0x140001ce240, 0x140001efd10)\n /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP/internal/tools/tasks.go:32 +0xb0\ngithub.com/linehaul/twenty-crm-mcp-http/internal/server.NewMCPServer(0x140001efd10)\n /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP/internal/server/server.go:24 +0x8c\nmain.main.func1(0x140003ceae0?)\n /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP/cmd/server/main.go:45 +0x20\ngithub.com/modelcontextprotocol/go-sdk/mcp.(*StreamableHTTPHandler).ServeHTTP(0x140001efda0, {0x1048215f0, 0x1400020e4b0}, 0x140001f6dc0)\n /Users/fakebizprez/go/pkg/mod/github.com/modelcontextprotocol/[email protected]/mcp/streamable.go:215 +0x7e0\nnet/http.serverHandler.ServeHTTP({0x10481ff88?}, {0x1048215f0?, 0x1400020e4b0?}, 0x1?)\n /opt/homebrew/Cellar/go/1.25.3/libexec/src/net/http/server.go:3340 +0xb0\nnet/http.(*conn).serve(0x140003d6630, {0x1048226b8, 0x140002580f0})\n /opt/homebrew/Cellar/go/1.25.3/libexec/src/net/http/server.go:2109 +0x528\ncreated by net/http.(*Server).Serve in goroutine 35\n /opt/homebrew/Cellar/go/1.25.3/libexec/src/net/http/server.go:3493 +0x384\n2025/10/19 03:04:40 http: panic serving [::1]:55184: AddTool: tool \"create_task\": input schema: ForType(tools.CreateTaskInput): tag must not begin with 'WORD=': \"enum=TODO,enum=IN_PROGRESS,enum=DONE\"\ngoroutine 19 [running]:\nnet/http.(*conn).serve.func1()\n /opt/homebrew/Cellar/go/1.25.3/libexec/src/net/http/server.go:1943 +0xb4\npanic({0x104763e40?, 0x14000322c90?})\n /opt/homebrew/Cellar/go/1.25.3/libexec/src/runtime/panic.go:783 +0x120\ngithub.com/modelcontextprotocol/go-sdk/mcp.AddTool[...](0x140001ce000?, 0x1400003b908, 0x0)\n /Users/fakebizprez/go/pkg/mod/github.com/modelcontextprotocol/[email protected]/mcp/server.go:400 +0xbc\ngithub.com/linehaul/twenty-crm-mcp-http/internal/tools.RegisterTaskTools(0x140001ce000, 0x140001efd10)\n /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP/internal/tools/tasks.go:32 +0xb0\ngithub.com/linehaul/twenty-crm-mcp-http/internal/server.NewMCPServer(0x140001efd10)\n /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP/internal/server/server.go:24 +0x8c\nmain.main.func1(0x140001efcb0?)\n /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP/cmd/server/main.go:45 +0x20\ngithub.com/modelcontextprotocol/go-sdk/mcp.(*StreamableHTTPHandler).ServeHTTP(0x140001efda0, {0x1048215f0, 0x1400020e000}, 0x14000000140)\n /Users/fakebizprez/go/pkg/mod/github.com/modelcontextprotocol/[email protected]/mcp/streamable.go:215 +0x7e0\nnet/http.serverHandler.ServeHTTP({0x10481ff88?}, {0x1048215f0?, 0x1400020e000?}, 0x1?)\n /opt/homebrew/Cellar/go/1.25.3/libexec/src/net/http/server.go:3340 +0xb0\nnet/http.(*conn).serve(0x1400041a990, {0x1048226b8, 0x140002580f0})\n /opt/homebrew/Cellar/go/1.25.3/libexec/src/net/http/server.go:2109 +0x528\ncreated by net/http.(*Server).Serve in goroutine 35\n /opt/homebrew/Cellar/go/1.25.3/libexec/src/net/http/server.go:3493 +0x384\n```\n\n“client”:\n\n```\nfakebizprez@scum-studio: /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP git:(feature-rich) ✗ \n➜ # Test 1: Initialize\n curl -X POST http://localhost:8080 \\ \n -H \"Content-Type: application/json\" \\\nfakebizprez@scum-studio: /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP git:(feature-rich) ✗ \n➜ curl -X POST http://localhost:8080 \\\n> -H \"Content-Type: application/json\" \\\n> -d '{\"jsonrpc\":\"2.0\",\"method\":\"initialize\",\"params\":{\"protocolVersion\":\"2024-11-05\",\"capabilities\":{},\"clientInfo\":{\"name\":\"test\",\"version\":\"1.0.0\"}},\"id\":1}'\ncurl: (52) Empty reply from server\nfakebizprez@scum-studio: /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP git:(feature-rich) ✗ \n➜ # Test 2: List tools\n curl -X POST http://localhost:8080 \\ \n -H \"Content-Type: application/json\" \\\nfakebizprez@scum-studio: /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP git:(feature-rich) ✗ \n➜ curl -X POST http://localhost:8080 \\\n> -H \"Content-Type: application/json\" \\\n> -d '{\"jsonrpc\":\"2.0\",\"method\":\"tools/list\",\"params\":{},\"id\":2}'\ncurl: (52) Empty reply from server\nfakebizprez@scum-studio: /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP git:(feature-rich) ✗ \n➜ # Test 3: Call search_contacts\n curl -X POST http://localhost:8080 \\ \n -H \"Content-Type: application/json\" \\\nfakebizprez@scum-studio: /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP git:(feature-rich) ✗ \n➜ curl -X POST http://localhost:8080 \\\n> -H \"Content-Type: application/json\" \\\n> -d '{\"jsonrpc\":\"2.0\",\"method\":\"tools/call\",\"params\":{\"name\":\"search_contacts\",\"arguments\":{\"query\":\"test\",\"limit\":5}},\"id\":3}'\ncurl: (52) Empty reply from server\nfakebizprez@scum-studio: /Users/fakebizprez/Developer/repositories/twentyCRM-MCP-HTTP git:(feature-rich) ✗ \n```\n\nUse context7 mcp server to lookup. any of the Twenty or MCP GO SDK documentation", "title": "Fix MCP Server Enum Tag Validation Error by Replacing Struct Tags with Programmatic Schema Setup", "createdAt": 1760976235596, "completed": false, "planRevisions": [ { "revisionIndex": 0, "plans": [ { "index": 0, "plan": "**Identify and locate the problematic struct definition** in the Twenty CRM MCP server codebase. Based on the error logs, the issue is in `internal/tools/tasks.go` at line 32 where `RegisterTaskTools` is called, and the problem is with the `CreateTaskInput` struct that contains enum struct tags like `enum=TODO,enum=IN_PROGRESS,enum=DONE`. Find this struct definition and examine its current implementation.", "completed": false }, { "index": 1, "plan": "**Replace the invalid enum struct tags with proper Go SDK enum handling**. The Go SDK does NOT support enum values via struct tags and will panic with 'tag must not begin with 'WORD=': \"enum=TODO,enum=IN_PROGRESS,enum=DONE\"'. Remove the `enum=` struct tags from the `CreateTaskInput` struct and replace them with standard `json:` and `jsonschema:` tags only. For example, change `Status string `json:\"status\" enum=\"TODO,IN_PROGRESS,DONE\"` to `Status string `json:\"status\" jsonschema:\"task status\"`.", "completed": false }, { "index": 2, "plan": "**Implement programmatic enum schema setup** using the correct Go SDK approach. After defining the tool with `mcp.AddTool`, modify the input schema programmatically to add enum constraints. Use `jsonschema.For[CreateTaskInput](nil)` to get the base schema, then set `schema.Properties[\"status\"].Enum = []any{\"TODO\", \"IN_PROGRESS\", \"DONE\"}` to add the enum values. Update the tool registration in `internal/tools/tasks.go` to use this programmatic approach instead of relying on struct tags.", "completed": false }, { "index": 3, "plan": "**Test the server startup and functionality** by running the Twenty CRM MCP server and verifying that it starts without panicking. Test the MCP endpoints using curl commands to ensure the server can handle initialization, tool listing, and tool calls properly. Verify that the enum constraints are properly reflected in the tool schema when calling the `tools/list` endpoint, and that the `create_task` tool accepts only valid enum values for the status field.", "completed": false } ], "createdAt": 1760976235596, "createdBy": "agent" } ], "activeRevisionIndex": 0 } ], "activeTaskIndex": 0 } [ "**Identify and locate the problematic struct definition** in the Twenty CRM MCP server codebase. Based on the error logs, the issue is in `internal/tools/tasks.go` at line 32 where `RegisterTaskTools` is called, and the problem is with the `CreateTaskInput` struct that contains enum struct tags like `enum=TODO,enum=IN_PROGRESS,enum=DONE`. Find this struct definition and examine its current implementation.", "**Replace the invalid enum struct tags with proper Go SDK enum handling**. The Go SDK does NOT support enum values via struct tags and will panic with 'tag must not begin with 'WORD=': \"enum=TODO,enum=IN_PROGRESS,enum=DONE\"'. Remove the `enum=` struct tags from the `CreateTaskInput` struct and replace them with standard `json:` and `jsonschema:` tags only. For example, change `Status string `json:\"status\" enum=\"TODO,IN_PROGRESS,DONE\"` to `Status string `json:\"status\" jsonschema:\"task status\"`.", "**Implement programmatic enum schema setup** using the correct Go SDK approach. After defining the tool with `mcp.AddTool`, modify the input schema programmatically to add enum constraints. Use `jsonschema.For[CreateTaskInput](nil)` to get the base schema, then set `schema.Properties[\"status\"].Enum = []any{\"TODO\", \"IN_PROGRESS\", \"DONE\"}` to add the enum values. Update the tool registration in `internal/tools/tasks.go` to use this programmatic approach instead of relying on struct tags.", "**Test the server startup and functionality** by running the Twenty CRM MCP server and verifying that it starts without panicking. Test the MCP endpoints using curl commands to ensure the server can handle initialization, tool listing, and tool calls properly. Verify that the enum constraints are properly reflected in the tool schema when calling the `tools/list` endpoint, and that the `create_task` tool accepts only valid enum values for the status field." ]

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