feat(agent-toolkit): add AI column configuration tools#372
Open
shaygr92 wants to merge 6 commits into
Open
Conversation
…n tools Add two new MCP tools for managing AI columns on monday.com boards: - configure_ai_column: Configure any of 8 AI block types (categorize, summarize, translate, improve_text, extract, open_block, write_me, person_assignment) on an existing column. Uses a block_type discriminator with conditional field validation. - remove_ai_from_column: Remove AI configuration from a column, deleting all associated automation recipes. Both tools use versionOverride: 'dev' to target the AIMS GraphQL subgraph. Includes 27 unit tests covering all block types, validation, and error propagation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
shaygr92
commented
Jun 3, 2026
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
damian-rakus
reviewed
Jun 3, 2026
| } | ||
|
|
||
| getInputSchema(): RemoveAiFromColumnToolInput { | ||
| if (this.context?.boardId) { |
Collaborator
There was a problem hiding this comment.
I believe our MCP is stateless and context will never have boardId. So imo this execution branch will never be hit. @RomKadria has anything changed? If not maybe we should remove it so that it's not misleading
damian-rakus
reviewed
Jun 3, 2026
| } | ||
|
|
||
| protected async executeInternal(input: ToolInputType<RemoveAiFromColumnToolInput>): Promise<ToolOutputType<never>> { | ||
| const boardId = this.context?.boardId ?? (input as ToolInputType<typeof removeAiFromColumnInBoardToolSchema>).board_id; |
Collaborator
There was a problem hiding this comment.
Same as above, I believe we won't have boardId in context.
damian-rakus
reviewed
Jun 3, 2026
| source_column_id: z.string().optional().describe( | ||
| 'The ID of the source column. Required when source_type is "column".', | ||
| ), | ||
| additional_instructions: z.string().optional().describe( |
Collaborator
There was a problem hiding this comment.
I believe you can use max() for character limit, same as below
damian-rakus
reviewed
Jun 3, 2026
| block_type: z.enum(AI_BLOCK_TYPES).describe( | ||
| 'The AI block type to configure. See tool description for which fields apply to each block.', | ||
| ), | ||
| source_type: z.enum(SOURCE_TYPES).optional().describe( |
Collaborator
There was a problem hiding this comment.
Seems like a lot of options are required only for specific block_type value? Did you assess if different LLMs are able to handle the complexity of this tool?
… string fields - Both tools now always require board_id as a direct input (context.boardId is never set in the stateless MCP server) - Added .max(3000) validation to additional_instructions, custom_instructions, and ai_query fields Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
oriblau-lab
approved these changes
Jun 3, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
configure_ai_columntool — configures any of 8 AI block types (categorize, summarize, translate, improve_text, extract, open_block, write_me, person_assignment) on an existing board columnremove_ai_from_columntool — removes AI configuration from a column (deletes automation recipes)versionOverride: 'dev'Design
Single
configure_ai_columntool with ablock_typediscriminator (following theManageAgentToolpattern) rather than 8 separate tools. Client-side validation for required fields per block type; server-side validation surfaces typed error codes (INVALID_COLUMN_TYPE,SELF_REFERENCING_COLUMN, etc.) directly to the LLM.Spec:
docs/spec-ai-column-tool.md(not included in this PR)Test plan
🤖 Generated with Claude Code