mumez

smalltalk-validator-mcp-server

Community mumez
Updated

MCP server for validating tonel formatted st files and smalltalk methods

smalltalk-validator-mcp-server

A simple MCP server for validating and linting Tonel formatted Smalltalk source code usingtree-sitter-tonel-smalltalk.

  • The purpose is that we would like to validate and lint AI-generated tonel files andSmalltalk method definitions before loading them into a real Smalltalk environment.

Tools

Validation Tools

validate_tonel_smalltalk_from_file(file_path, options)
  • Validate Tonel formatted Smalltalk source code from a file
validate_tonel_smalltalk(file_content, options)
  • Validate Tonel formatted Smalltalk source code from content string
validate_smalltalk_method_body(method_body_content)
  • Validate a Smalltalk method body for syntax correctness
Validation Options
without-method-body: true
    if true, it only validates tonel structure only (mainly for testing)

Linting Tools

lint_tonel_smalltalk_from_file(file_path)
  • Lint Tonel formatted Smalltalk source code from a file
lint_tonel_smalltalk(file_content)
  • Lint Tonel formatted Smalltalk source code from content string

See docs/lint-checks.md for the full list of checks.

Installation

Quick install (uvx)

Run directly without cloning:

uvx --from git+https://github.com/mumez/smalltalk-validator-mcp-server.git@main smalltalk-validator-mcp-server

Development setup (git clone)

git clone https://github.com/mumez/smalltalk-validator-mcp-server.git
cd smalltalk-validator-mcp-server
uv sync

Usage

Running the MCP Server

  • Using uvx (recommended for quick run):
uvx --from git+https://github.com/mumez/smalltalk-validator-mcp-server.git@main smalltalk-validator-mcp-server
  • From a cloned repo:
uv run smalltalk-validator-mcp-server

Configuration Examples

Cursor Configuration

Add to your .cursor/settings.json:

{
  "mcpServers": {
    "smalltalk-validator": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/mumez/smalltalk-validator-mcp-server.git@main",
        "smalltalk-validator-mcp-server"
      ]
    }
  }
}

If you prefer using a local clone, use this instead:

{
  "mcpServers": {
    "smalltalk-validator": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/smalltalk-validator-mcp-server",
        "run",
        "smalltalk-validator-mcp-server"
      ]
    }
  }
}
Claude Code Configuration

Add to your Claude Code settings:

claude mcp add smalltalk-validator -- uvx --from git+https://github.com/mumez/smalltalk-validator-mcp-server.git@main smalltalk-validator-mcp-server

Using a local clone instead:

claude mcp add smalltalk-validator -- uv --directory /path/to/smalltalk-validator-mcp-server run smalltalk-validator-mcp-server

Tool Usage Examples

Validate Tonel file from filesystem
# Validate a complete Tonel file with method bodies
validate_tonel_smalltalk_from_file("/path/to/MyClass.st")

# Validate only Tonel structure (without method body validation)
validate_tonel_smalltalk_from_file("/path/to/MyClass.st", {"without-method-body": true})
Validate Tonel content directly
tonel_content = """
Class {
    #name : #MyClass,
    #superclass : #Object,
    #category : #'My-Package'
}

{ #category : #accessing }
MyClass >> getValue [
    ^ 42
]
"""

validate_tonel_smalltalk(tonel_content)
Validate Smalltalk method body
method_body = "^ self name asUppercase"
validate_smalltalk_method_body(method_body)
Lint Tonel file from filesystem
# Lint a Tonel file for best practices and style issues
result = lint_tonel_smalltalk_from_file("/path/to/MyClass.st")

# Example result:
# {
#   "success": true,
#   "file_path": "/path/to/MyClass.st",
#   "issue_list": [
#     {
#       "severity": "warning",
#       "message": "Method 'longMethod' long: 18 lines (recommended: 15)",
#       "class_name": "MyClass",
#       "selector": "longMethod",
#       "is_class_method": false
#     }
#   ],
#   "issues_count": 1,
#   "warnings_count": 0,
#   "errors_count": 0
# }
Lint Tonel content directly
tonel_content = """
Class {
    #name : #MyClass,
    #superclass : #Object,
    #instVars : [
        'name',
        'age'
    ],
    #category : #'My-Package'
}

{ #category : #accessing }
MyClass >> getName [
    ^ name
]
"""

result = lint_tonel_smalltalk(tonel_content)

Development

# Install dependencies
uv sync

# Run tests
uv run pytest

# Lint and format
uv run ruff check
uv run ruff format

# Install pre-commit hooks
uv run pre-commit install

MCP Server ยท Populars

MCP Server ยท New

    sap156

    Zillow MCP Server

    Zillow MCP Server for real estate data access via the Model Context Protocol

    Community sap156
    gossipcat-ai

    gossipcat-ai

    Multi-agent code review mesh โ€” orchestrates AI agents from multiple providers to review code in parallel, cross-review each other's findings, and build accuracy profiles over time. Agents that catch real bugs get picked more often. Agents that hallucinate get deprioritized. MCP server for Claude Code, Cursor, and other IDEs.

    Community gossipcat-ai
    mediar-ai

    mcp-server-macos-use

    AI agent that controls computer with OS-level tools, MCP compatible, works with any model

    Community mediar-ai
    db-lyon

    UE-MCP

    Complete Unreal Engine development toolkit exposed as MCP tools.

    Community db-lyon
    obra

    Superpowers Chrome - Claude Code Plugin

    Claude Code plugin for direct Chrome browser control via DevTools Protocol - zero dependencies

    Community obra