Agent skill

MCP Dart Server

by leehack in leehack/mcp_dart

A skill your agent uses when building or extending a Model Context Protocol (MCP) server in Dart with mcpdart: structuring the project, creating an McpServer, adding tools, resources, resource…

MITAuto-check passedAgent Workflows

Install MCP Dart Server

skills CLI
$ npx skills add leehack/mcp_dart --skill mcp-dart-server -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install leehack/mcp_dart mcp-dart-server --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/leehack/mcp_dart.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/mcp-dart-server .claude/skills/mcp-dart-server && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
mcp-dart-server
GitHub stars
116
Token cost
~4.1k tokens
SKILL.md length
642 words
Files
1
Skills in repo
4
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when building or extending a Model Context Protocol (MCP) server in Dart with mcpdart: structuring the project, creating an McpServer, adding tools, resources, resource…

  • Extending a Model Context Protocol (MCP) server in Dart with mcpdart: structuring the project
  • SKILL.md covers Project structure, Guidelines, Examples and More
  • Calls dart
  • Creating an McpServer

What it does

MCP Dart Server is an agent skill from leehack/mcp_dart. Use when building or extending a Model Context Protocol (MCP) server in Dart with mcpdart: structuring the project, creating an McpServer, adding tools, resources, resource templates or prompts, returning tool results and errors, reporting progress, running over stdio, or testing the server.

Its SKILL.md is about 4.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Agent Workflows, covering MCP servers. It works with Model Context Protocol and Dart. The repository describes itself as: Dart implementation of MCP SDK. The licence is MIT.

When your agent uses it

  • Extending a Model Context Protocol (MCP) server in Dart with mcpdart: structuring the project
  • Creating an McpServer
  • Resource templates
  • Returning tool results and errors

Example prompts

  • “/mcp-dart-server”

What it can do on your machine

Read from SKILL.md and the folder at commit 69ffef3. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • dart

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

MCP Dart Server loads about 4.1k tokens when it runs. Until then it costs about 77 tokens; SKILL.md has 642 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~77
When it runs · the whole SKILL.md, loaded when a task matches
~4.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from leehack/mcp_dart at commit 69ffef3, republished under its MIT licence (© leehack). 642 words, ~4,059 tokens.

Download SKILL.mdSave it as .claude/skills/mcp-dart-server/SKILL.md (or your agent's skills folder).
name
mcp-dart-server
description
Use when building or extending a Model Context Protocol (MCP) server in Dart with mcp_dart: structuring the project, creating an McpServer, adding tools, resources, resource templates or prompts, returning tool results and errors, reporting progress, running over stdio, or testing the server.

Building an MCP server with mcp_dart

McpServer exposes tools, resources and prompts to MCP clients. By default it speaks MCP 2026-07-28 and falls back to initialization-era versions (MCP 2025-11-25 and earlier) for legacy clients. Import everything from package:mcp_dart/mcp_dart.dart.

Project structure

Keep MCP wiring thin and separate from the application's logic. This is the layout that mcp_dart create generates; use it for hand-written servers too:

text
my_server/
  bin/server.dart               # Reads config, builds shared services, picks the transport.
  lib/mcp/mcp.dart              # createMcpServer(services): the only server factory.
  lib/mcp/tools/base_tool.dart  # BaseTool + registerBaseTool extension.
  lib/mcp/tools/*_tool.dart     # One class per tool; dependencies via the constructor.
  lib/mcp/resources/            # Resources and resource templates.
  lib/mcp/prompts/              # Prompts.
  lib/src/                      # Domain services and models; no mcp_dart imports.
  test/                         # In-process client/server tests.
  • If lib/mcp/tools/base_tool.dart already exists, the project came from mcp_dart create. Follow it: add a BaseTool subclass and list it in createAllTools(), and use BaseResource/BasePrompt the same way. Do not add inline registerTool calls beside that pattern.
  • To start a new standalone server, dart pub global activate mcp_dart_cli then mcp_dart create my_server (the CLI needs Dart 3.12; the generated project adds args and logging and targets Dart 3.4). Adding a server to an existing package needs only dart pub add mcp_dart.
  • Tool classes are adapters: parse arguments, call a domain service, map domain failures to CallToolResult(isError: true). Keep business rules, I/O and state in lib/src/ so they are testable without MCP.
  • Build services once in bin/server.dart and pass them to createMcpServer. Never create state inside a tool call or inside a Streamable HTTP serverFactory, which runs per request or session.
  • Read configuration and secrets at startup (arguments, environment) and pass them in. Never log secrets or read them inside handlers.

Guidelines

  • Create the server with McpServer(Implementation(name:, version:)). The register* methods advertise the tools, resources and prompts capabilities automatically; pass McpServerOptions(capabilities: ...) only for extra flags such as listChanged or subscribe, and advertise only what the server actually implements.
  • Keep the default McpProtocol.stable profile. Use McpServerOptions(protocol: McpProtocol.legacy) or McpProtocol.require2026 only when a deployment must pin one protocol era.
  • Register everything before connect. One McpServer instance owns one transport; build a fresh instance per transport from createMcpServer.
  • Describe tool inputs with JsonSchema.object(properties: ..., required: ...). The SDK validates arguments before the callback runs, so the callback may cast declared fields (args['a'] as num). Still validate business rules.
  • Tool callbacks take (Map<String, dynamic> args, RequestHandlerExtra extra) and return CallToolResult. Return CallToolResult(isError: true, ...) for expected domain failures (not found, bad input, upstream API errors) so the model can recover. Throw McpError(ErrorCode.x.value, message) only for protocol-level failures.
  • For typed output, declare outputSchema and return CallToolResult.fromStructuredContent({...}); it also fills content with the serialized JSON for clients that ignore structured content.
  • Set ToolAnnotations(readOnlyHint: true), destructiveHint, idempotentHint or openWorldHint honestly; they are hints, not access control.
  • Long-running tools call extra.sendProgress(done, total: n, message: ...) (a no-op when the client sent no progress token) and check extra.signal.aborted to stop promptly after cancellation.
  • Resources: registerResource(name, uri, (description:, mimeType:), callback) for fixed URIs; registerResourceTemplate(name, ResourceTemplateRegistration('scheme://{var}', listCallback: null), ...) for URI families. Return contents whose uri is the concrete requested URI. For an unknown URI, throw McpError with invalidParams for MCP 2026-07-28 requests and resourceNotFound for legacy ones.
  • Prompts: registerPrompt(name, argsSchema: {...}, callback: ...). The prompt callback's args and extra are nullable.
  • A callback that must ask the client for more input mid-call (MCP 2026-07-28 InputRequiredResult) needs the registerStateless* counterpart. Use the plain register* methods otherwise.
  • Stdio servers must write only MCP frames to stdout. Send application logs to stderr, never print. Tune SDK-internal logs with setMcpLogHandler or silenceMcpLogs.
  • Each incoming stdio message is limited to 10 MiB by default; raise it with StdioServerTransport(maxIncomingMessageBytes: ...) only when needed, and keep it finite.
  • Test through a real client over an in-process IOStreamTransport pair with fake or in-memory services. Check a running server by hand with mcp_dart inspect (the CLI's mcp_dart skills install adds a debugging workflow skill for its inspect and trace commands).
Show full SKILL.md (57 more words)Show less

Examples

A complete server in the layout above. Each block is one file, named by its first line; my_server is the package name.

dart
// file: lib/src/note_repository.dart
/// Thrown when a note violates a business rule.
class NoteRejected implements Exception {
  NoteRejected(this.message);

  final String message;
}

/// Domain service; it knows nothing about MCP.
class NoteRepository {
  final Map<String, String> _notes = {};

  Iterable<String> get ids => _notes.keys;

  String? read(String id) => _notes[id];

  void save(String id, String text) {
    if (!RegExp(r'^[a-z0-9-]+$').hasMatch(id)) {
      throw NoteRejected('id must be lowercase letters, digits or hyphens.');
    }
    _notes[id] = text;
  }
}
dart
// file: lib/mcp/tools/base_tool.dart
import 'package:mcp_dart/mcp_dart.dart';

abstract class BaseTool {
  String get name;
  String get description;
  ToolInputSchema get inputSchema;
  ToolOutputSchema? get outputSchema => null;
  ToolAnnotations? get annotations => null;

  Future<CallToolResult> execute(
    Map<String, dynamic> args,
    RequestHandlerExtra extra,
  );
}

extension ToolRegistration on McpServer {
  void registerBaseTool(BaseTool tool) {
    registerTool(
      tool.name,
      description: tool.description,
      inputSchema: tool.inputSchema,
      outputSchema: tool.outputSchema,
      annotations: tool.annotations,
      callback: tool.execute,
    );
  }
}
dart
// file: lib/mcp/tools/add_note_tool.dart
import 'package:mcp_dart/mcp_dart.dart';
import 'package:my_server/mcp/tools/base_tool.dart';
import 'package:my_server/src/note_repository.dart';

class AddNoteTool extends BaseTool {
  AddNoteTool(this._notes);

  final NoteRepository _notes;

  @override
  String get name => 'add_note';

  @override
  String get description => 'Store a note under an id.';

  @override
  ToolInputSchema get inputSchema => JsonSchema.object(
        properties: {
          'id': JsonSchema.string(description: 'Lowercase note id'),
          'text': JsonSchema.string(description: 'Note body'),
        },
        required: ['id', 'text'],
      );

  @override
  ToolAnnotations get annotations =>
      const ToolAnnotations(idempotentHint: true);

  @override
  Future<CallToolResult> execute(
    Map<String, dynamic> args,
    RequestHandlerExtra extra,
  ) async {
    final id = args['id'] as String;
    try {
      _notes.save(id, args['text'] as String);
    } on NoteRejected catch (error) {
      return CallToolResult(
        isError: true,
        content: [TextContent(text: error.message)],
      );
    }
    return CallToolResult(content: [TextContent(text: 'Saved $id.')]);
  }
}
dart
// file: lib/mcp/tools/count_notes_tool.dart
import 'package:mcp_dart/mcp_dart.dart';
import 'package:my_server/mcp/tools/base_tool.dart';
import 'package:my_server/src/note_repository.dart';

class CountNotesTool extends BaseTool {
  CountNotesTool(this._notes);

  final NoteRepository _notes;

  @override
  String get name => 'count_notes';

  @override
  String get description => 'Return how many notes are stored.';

  @override
  ToolInputSchema get inputSchema => JsonSchema.object(properties: {});

  @override
  ToolOutputSchema get outputSchema => JsonSchema.object(
        properties: {'count': JsonSchema.integer()},
        required: ['count'],
      );

  @override
  ToolAnnotations get annotations => const ToolAnnotations(readOnlyHint: true);

  @override
  Future<CallToolResult> execute(
    Map<String, dynamic> args,
    RequestHandlerExtra extra,
  ) async =>
      CallToolResult.fromStructuredContent({'count': _notes.ids.length});
}
dart
// file: lib/mcp/resources/note_resources.dart
import 'package:mcp_dart/mcp_dart.dart';
import 'package:my_server/src/note_repository.dart';

void registerNoteResources(McpServer server, NoteRepository notes) {
  server.registerResource(
    'Note index',
    'notes://index',
    (description: 'All note ids', mimeType: 'text/plain'),
    (uri, extra) => ReadResourceResult(
      contents: [
        TextResourceContents(
          uri: uri.toString(),
          mimeType: 'text/plain',
          text: notes.ids.join('\n'),
        ),
      ],
    ),
  );

  server.registerResourceTemplate(
    'Note',
    ResourceTemplateRegistration('notes://{id}', listCallback: null),
    (description: 'One note by id', mimeType: 'text/plain'),
    (uri, variables, extra) {
      final id = variables['id'];
      final text = id is String ? notes.read(id) : null;
      if (text == null) {
        final version = extra.protocolVersion;
        throw McpError(
          version != null && isStatelessProtocolVersion(version)
              ? ErrorCode.invalidParams.value
              : ErrorCode.resourceNotFound.value,
          'Resource not found',
          {'uri': uri.toString()},
        );
      }
      return ReadResourceResult(
        contents: [
          TextResourceContents(
            uri: uri.toString(),
            mimeType: 'text/plain',
            text: text,
          ),
        ],
      );
    },
  );
}
dart
// file: lib/mcp/prompts/note_prompts.dart
import 'package:mcp_dart/mcp_dart.dart';
import 'package:my_server/src/note_repository.dart';

void registerNotePrompts(McpServer server, NoteRepository notes) {
  server.registerPrompt(
    'summarize_note',
    description: 'Ask the model to summarize a note.',
    argsSchema: const {
      'id': PromptArgumentDefinition(description: 'Note id', required: true),
    },
    callback: (args, extra) {
      final id = args?['id'] as String? ?? '';
      return GetPromptResult(
        messages: [
          PromptMessage(
            role: PromptMessageRole.user,
            content: TextContent(
              text: 'Summarize this note:\n${notes.read(id) ?? '(missing)'}',
            ),
          ),
        ],
      );
    },
  );
}
dart
// file: lib/mcp/mcp.dart
import 'package:mcp_dart/mcp_dart.dart';
import 'package:my_server/mcp/prompts/note_prompts.dart';
import 'package:my_server/mcp/resources/note_resources.dart';
import 'package:my_server/mcp/tools/add_note_tool.dart';
import 'package:my_server/mcp/tools/base_tool.dart';
import 'package:my_server/mcp/tools/count_notes_tool.dart';
import 'package:my_server/src/note_repository.dart';

List<BaseTool> createAllTools(NoteRepository notes) => [
      AddNoteTool(notes),
      CountNotesTool(notes),
    ];

McpServer createMcpServer(NoteRepository notes) {
  final server = McpServer(
    const Implementation(name: 'my_server', version: '1.0.0'),
    options: const McpServerOptions(
      instructions: 'Stores short notes. Use add_note, then read notes://.',
    ),
  );
  for (final tool in createAllTools(notes)) {
    server.registerBaseTool(tool);
  }
  registerNoteResources(server, notes);
  registerNotePrompts(server, notes);
  return server;
}
dart
// file: bin/server.dart
import 'dart:io';

import 'package:mcp_dart/mcp_dart.dart';
import 'package:my_server/mcp/mcp.dart';
import 'package:my_server/src/note_repository.dart';

Future<void> main(List<String> args) async {
  final notes = NoteRepository();

  if (!args.contains('--http')) {
    await createMcpServer(notes).connect(StdioServerTransport());
    stderr.writeln('my_server ready on stdio');
    return;
  }

  final server = StreamableMcpServer(
    serverFactory: (sessionId) => createMcpServer(notes),
    host: '127.0.0.1',
    port: 3000,
  );
  await server.start();
  stderr.writeln('my_server listening on http://127.0.0.1:3000/mcp');
  await ProcessSignal.sigint.watch().first;
  await server.stop();
}
dart
// file: test/add_note_tool_test.dart
import 'dart:async';

import 'package:mcp_dart/mcp_dart.dart';
import 'package:my_server/mcp/mcp.dart';
import 'package:my_server/src/note_repository.dart';
import 'package:test/test.dart';

void main() {
  late NoteRepository notes;
  late McpServer server;
  late McpClient client;
  late List<StreamController<List<int>>> pipes;

  setUp(() async {
    notes = NoteRepository();
    server = createMcpServer(notes);
    final toServer = StreamController<List<int>>();
    final toClient = StreamController<List<int>>();
    pipes = [toServer, toClient];
    await server.connect(
      IOStreamTransport(stream: toServer.stream, sink: toClient.sink),
    );
    client = McpClient(const Implementation(name: 'test', version: '1.0.0'));
    await client.connect(
      IOStreamTransport(stream: toClient.stream, sink: toServer.sink),
    );
  });

  tearDown(() async {
    await client.close();
    await server.close();
    for (final pipe in pipes) {
      await pipe.close();
    }
  });

  test('add_note stores the note', () async {
    final result = await client.callTool(
      const CallToolRequest(
        name: 'add_note',
        arguments: {'id': 'todo', 'text': 'Ship it'},
      ),
    );
    expect(result.isError, isFalse);
    expect(notes.read('todo'), 'Ship it');
  });

  test('add_note returns rejected input as a tool error', () async {
    final result = await client.callTool(
      const CallToolRequest(
        name: 'add_note',
        arguments: {'id': 'Bad Id', 'text': 'x'},
      ),
    );
    expect(result.isError, isTrue);
    expect(notes.ids, isEmpty);
  });
}

A cancellable tool that reports progress:

dart
import 'package:mcp_dart/mcp_dart.dart';

Future<CallToolResult> exportRows(
  Map<String, dynamic> args,
  RequestHandlerExtra extra,
) async {
  final rows = args['rows'] as int;
  for (var done = 0; done < rows; done += 100) {
    if (extra.signal.aborted) {
      return const CallToolResult(
        isError: true,
        content: [TextContent(text: 'Export cancelled.')],
      );
    }
    await Future<void>.delayed(const Duration(milliseconds: 10));
    await extra.sendProgress(
      done.toDouble(),
      total: rows.toDouble(),
      message: 'Exported $done of $rows rows',
    );
  }
  return CallToolResult(content: [TextContent(text: 'Exported $rows rows.')]);
}

More

© leehack, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/mcp-dart-server of leehack/mcp_dart.

Open the folder on GitHubat commit 69ffef3

Compare with similar skills

MCP Dart Server next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

MCP Dart Server compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
MCP Dart Server this skillleehack/mcp_dart116—~4.1kAutomated safety check: PassMIT
Add Dart MCP Server Featuredart-lang/ai286—~687Automated safety check: PassBSD-3-Clause
Flutter MCP E2E HarnessArenukvern/mcp_flutter385—~2.2kAutomated safety check: PassMIT
Flutter MCP Toolkit DebugArenukvern/mcp_flutter385—~4.7kAutomated safety check: PassMIT
MCP Server Builderanthropics/skills180k62 repos~2.3kAutomated safety check: PassApache-2.0
MCP Server BuildershareAI-lab/learn-claude-code78k5 repos~1.2kAutomated safety check: PassMIT

Similar skills

  • Instructions for adding new features (tools, prompts, etc.) to the dartmcpserver package.

    286 GitHub stars~687 tokensUpdated yesterday
    Agent WorkflowsAuto-check passed
  • Flutter MCP E2E Harness

    Arenukvern/mcp_flutter

    A skill your agent uses when writing or running repeatable E2E scenarios for Flutter apps as checked-in Dart with the fluttermcpharness package (packages/harness) — build/launch the app, attach to…

    385 GitHub stars~2.2k tokensUpdated 4 days ago
    MobileAuto-check passed
  • Flutter MCP Toolkit Debug

    Arenukvern/mcp_flutter

    Diagnose problems in a running Flutter app — read logs, evaluate Dart expressions, interpret error envelopes.

    385 GitHub stars~4.7k tokensUpdated 4 days ago
    MobileAuto-check passed
  • MCP Server Builder

    anthropics/skills

    Official

    Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.

    180k GitHub starsUsed in 62 repos~2.3k tokens
    Agent WorkflowsAuto-check passed
  • MCP Server Builder

    shareAI-lab/learn-claude-code

    Walks through building MCP servers in Python or TypeScript that expose tools, resources and prompts to Claude, with templates, registration and testing.

    78k GitHub starsUsed in 5 repos~1.2k tokens
    Agent WorkflowsAuto-check passed
  • MCP Integration for Plugins

    anthropics/claude-plugins-official

    Official

    Explains how to bundle Model Context Protocol servers in a Claude Code plugin, covering config files, stdio, SSE, HTTP and WebSocket server types, and authentication.

    37k GitHub starsUsed in 11 repos~3.1k tokens
    Agent WorkflowsAuto-check passed

More from leehack/mcp_dart

  • MCP Dart Client

    leehack/mcp_dart

    A skill your agent uses when connecting a Dart or Flutter app to a Model Context Protocol (MCP) server with mcpdart: creating an McpClient, launching a local server over stdio or reaching a remote…

    116 GitHub stars~1.8k tokensUpdated 2 days ago
    Auto-check passed
  • MCP Dart Streamable HTTP

    leehack/mcp_dart

    A skill your agent uses when serving an MCP server over HTTP with mcpdart or connecting to a remote one: StreamableMcpServer setup, Host and Origin allowlists (DNS rebinding protection), CORS for…

    116 GitHub stars~2k tokensUpdated 2 days ago
    Auto-check passed
  • MCP Developer

    leehack/mcp_dart

    A skill your agent uses when building, testing, debugging, or reviewing Model Context Protocol servers, clients, transports, tools, resources, prompts, and agent host configuration.

    116 GitHub stars~770 tokensUpdated 2 days ago
    Auto-check passed

Categories

Questions about MCP Dart Server

What does MCP Dart Server do?

A skill your agent uses when building or extending a Model Context Protocol (MCP) server in Dart with mcpdart: structuring the project, creating an McpServer, adding tools, resources, resource…. MCP Dart Server is an agent skill from leehack/mcp_dart. Use when building or extending a Model Context Protocol (MCP) server in Dart with mcpdart: structuring the project, creating an McpServer, adding tools, resources, resource templates or prompts, returning tool results and errors, reporting progress, running over stdio, or testing the server.

When should I use MCP Dart Server?

MCP Dart Server fits situations like: extending a Model Context Protocol (MCP) server in Dart with mcpdart: structuring the project; creating an McpServer; resource templates; returning tool results and errors.

How do I install MCP Dart Server in Claude Code?

Run `npx skills add leehack/mcp_dart --skill mcp-dart-server -a claude-code`. Or copy the skill folder (skills/mcp-dart-server in leehack/mcp_dart) into .claude/skills/mcp-dart-server in your project. Claude Code loads it when a task matches its description.

How do I install MCP Dart Server in Codex?

Run `npx skills add leehack/mcp_dart --skill mcp-dart-server -a codex`. Or copy the skill folder (skills/mcp-dart-server in leehack/mcp_dart) into .agents/skills/mcp-dart-server in your project. Codex loads it when a task matches its description.

Can I use MCP Dart Server in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add leehack/mcp_dart --skill mcp-dart-server -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/mcp-dart-server, .gemini/skills/mcp-dart-server, .github/skills/mcp-dart-server and .opencode/skills/mcp-dart-server in your project.

What does MCP Dart Server need to run?

Going by SKILL.md and its folder, MCP Dart Server needs the command-line tools its instructions call (dart).

Does MCP Dart Server access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is MCP Dart Server safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does MCP Dart Server use?

MCP Dart Server is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does MCP Dart Server use?

About 4.1k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to MCP Dart Server?

Skills that share tags, products or a category with MCP Dart Server: Add Dart MCP Server Feature (dart-lang/ai, 286 stars), Flutter MCP E2E Harness (Arenukvern/mcp_flutter, 385 stars), Flutter MCP Toolkit Debug (Arenukvern/mcp_flutter, 385 stars) and MCP Server Builder (anthropics/skills, 180k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains MCP Dart Server?

leehack (a GitHub user) maintains it in leehack/mcp_dart, which has 116 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on October 5, 2026.

Source: leehack/mcp_dart on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.