---
name: add-dart-mcp-server-feature
description: >
  Instructions for adding new features (tools, prompts, etc.) to the
  dart_mcp_server package.
internal: true
---

# Adding Features to dart_mcp_server

Follow these instructions when adding new tools, prompts, or other capabilities
to the `dart_mcp_server`.

## 1. Locate or Create a Mixin

All server features are implemented as mixins on the `DartMCPServer` at
`pkgs/dart_mcp_server/lib/src/server.dart`.

- **Check existing mixins**: Look under `pkgs/dart_mcp_server/lib/src/mixins/`
  to see if your feature fits into an existing category (e.g., `analyzer.dart`,
  `pub.dart`).
- **Create a new mixin**: If your feature is distinct, create a new file in that
  directory, following the patterns in existing mixins. Make sure to include a
  copyright header at the top of the file, with the current year.

## 2. Implementation Details

- **Registration**: Tools, prompts, etc should be registered in the `initialize`
  method of the mixin, which is an override and must call `super.initialize()`.
- **Parameter Names**: When adding new arguments to tools or prompts, always
  add a constant to the `ParameterNames` extension in
  `pkgs/dart_mcp_server/lib/src/utils/names.dart` and use that constant
  instead of hardcoding string literals in your tool parsing and schema.
- **Analytics**: Never send raw strings from the client to analytics. Tools
  with a `command` parameter must declare its values with an `enum` (for
  example `EnumSchema.untitledSingleSelect`), because only those values are
  included in the logged tool name. Similarly, new prompts must be added to the
  `PromptNames` enum, because only those prompt names are logged. Create
  analytics events with `createDartMCPEvent` from
  `pkgs/dart_mcp_server/lib/src/utils/analytics.dart`, which sanitizes the
  client info.

## 3. Testing

Always add tests for any new features.

- **Test Harness**: Use the `TestHarness` class located in
  `pkgs/dart_mcp_server/test/test_harness.dart`.
- **Existing Tests**: Look at `pkgs/dart_mcp_server/test/tools/` for examples of
  how to test specific tools.
- **Enhance Harness**: If the current `TestHarness` lacks functionality needed
  for your test, feel free to add it.

## 4. Verification

- Run tests
- Run analysis
- Format the code

## 5. Documentation

- Run the `pkgs/dart_mcp_server/tool/update_readme.dart` script to update the
  `README.md` file with any new features, it must be ran from the
  `pkgs/dart_mcp_server` directory.
- Apply any other manual edits to the `README.md` file as needed.
- Update the `CHANGELOG.md` file to include any user facing updates.

## 6. Update this skill

- Update this `SKILL.md` file if that would be helpful for future features.
