Thank you for your interest in contributing! This guide will help you get started.
- Fork the repository
- Clone your fork:
git clone https://github.com/YOUR_USERNAME/asc-mcp.git - Create a branch:
git checkout -b feature/your-feature - Build:
swift build - Test:
swift test - Commit your changes:
git commit -m 'Add your feature' - Push:
git push origin feature/your-feature - Open a Pull Request against the
developbranch
- Swift 6 strict concurrency — all types must be
Sendable, use proper actor isolation - Actors for stateful services; avoid shared mutable state
- async/await for all I/O operations
- No emojis in commit messages or code comments
- Internal visibility by default; mark
publiconly when necessary - Comment all public methods with
///doc comments
Each worker follows a 3-file pattern:
Workers/MyWorker/
├── MyWorker.swift # Main class, getTools(), handleTool()
├── MyWorker+ToolDefinitions.swift # Tool schemas (name, description, parameters)
└── MyWorker+Handlers.swift # Handler implementations
- Add handler method in
Worker+Handlers.swift - Add tool definition in
Worker+ToolDefinitions.swift - Register in
getTools()array - Add case to
handleTool()switch - WorkerManager auto-routes by prefix — no changes needed there
- Update tests in
WorkerToolDefinitionsTests.swift
- Create
Workers/MyWorker/with 3 files (see structure above) - Create models in
Models/MyDomain/ - Register in
WorkerManager.swift: property, init,registerWorkers(),reinitializeWorkers(), getter - Add worker name to
EntryPoint.swift→validWorkersset - Add prefix description to
Application.swift→ server instructions - Update tests:
WorkerToolDefinitionsTests,WorkerRoutingTests,ParameterValidationTests
- All tests must pass:
swift test - Use Swift Testing framework (
@Suite,@Test,#expect) - Add tool count and name tests for any new/modified worker
- Add parameter validation tests for required parameters
- Use
TestFactoryhelpers fromTests/ASCMCPTests/Helpers/TestHelpers.swift
-
swift buildsucceeds with no warnings -
swift test— all tests pass - All new types are
Sendable - Public methods have
///doc comments - Worker tool counts updated in tests
- No hardcoded credentials or API keys
Please read and follow our Code of Conduct.