Skip to content

Organize docs into https://docs.page format #61

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 13 commits into from
Jul 22, 2025
Merged

Organize docs into https://docs.page format #61

merged 13 commits into from
Jul 22, 2025

Conversation

Arenukvern
Copy link
Owner

@Arenukvern Arenukvern commented Jul 10, 2025

Draft to organize docs with https://docs.page

Summary by CodeRabbit

  • Documentation
    • Added comprehensive documentation covering project overview, architecture, configuration, built-in tools, dynamic tool registration, installation guides (manual and AI-assisted), client setup, contribution guidelines, changelog, and troubleshooting.
    • Introduced a structured documentation index and navigation sidebar for easier access to topics.
    • Provided step-by-step guides for creating dynamic tools and practical debugging workflows.
    • Removed the sample environment configuration file from the server directory.

@Arenukvern Arenukvern self-assigned this Jul 10, 2025
Copy link

coderabbitai bot commented Jul 10, 2025

Warning

Rate limit exceeded

@Arenukvern has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 18 minutes and 51 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between 9659053 and 9bd9ff1.

📒 Files selected for processing (1)
  • docs/contributing/contribution_guide.mdx (1 hunks)

Walkthrough

This update introduces a comprehensive documentation suite for the Flutter MCP Toolkit project. It adds new guides, conceptual overviews, troubleshooting resources, contribution guidelines, and configuration references. The changes also include a documentation navigation configuration file and the removal of a sample environment variable file from the server directory.

Changes

File(s) Change Summary
docs/index.mdx New documentation overview page for the Flutter MCP Toolkit.
docs.json Adds documentation configuration and sidebar structure.
docs/contributing/contribution_guide.mdx
docs/contributing/contributors.mdx
docs/contributing/docs_maintenance.mdx
Adds contribution guide, contributors acknowledgment, and docs maintenance instructions.
docs/core/built_in_tools.mdx
docs/core/dynamic_tools_registry.mdx
docs/core/mcp_configuration.mdx
docs/core/project_architecture.mdx
Adds documentation on built-in tools, dynamic tools registry, MCP configuration, and project architecture.
docs/getting_started/llm_install_files.mdx
docs/getting_started/manual_client_setup.mdx
docs/getting_started/manual_installation.mdx
Adds getting started guides for AI agent installation, manual client setup, and manual installation.
docs/guides/creating_dynamic_tools.mdx
docs/guides/debugging_workflow.mdx
Adds guides for creating dynamic tools and a practical debugging workflow.
docs/troubleshooting/changelog.mdx
docs/troubleshooting/common_issues.mdx
Adds troubleshooting guides for changelog reference and common issues.
ARCHITECTURE.md Updates architecture doc by removing old use cases and adding a dynamic tool registration example.
mcp_server_dart/.env.sample Removes the sample environment variable file from the server directory.

Sequence Diagram(s)

sequenceDiagram
    participant Developer
    participant Docs
    participant MCP Server
    participant Flutter App
    participant AI Assistant

    Developer->>Docs: Reads installation/setup/configuration guides
    Developer->>Flutter App: Adds/initializes mcp_toolkit
    Developer->>MCP Server: Starts server with config from docs
    Flutter App->>MCP Server: Registers dynamic tools/resources (per docs)
    AI Assistant->>MCP Server: Sends commands (e.g., take screenshot)
    MCP Server->>Flutter App: Forwards commands, receives responses
    MCP Server->>AI Assistant: Returns results (e.g., screenshot, errors)
Loading

Estimated code review effort

2 (~15–20 minutes)

Poem

🐇
In burrows deep, new docs appear,
Guides and guides, all crystal clear.
From tools to tips, and workflows bright,
Troubles vanish out of sight.
With every hop, the docs expand—
A rabbit’s dream, so well planned!
📚✨


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@Arenukvern Arenukvern changed the title Feat/docs Organize docs into https://docs.page format Jul 10, 2025
@Arenukvern Arenukvern marked this pull request as ready for review July 15, 2025 12:21
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 8

🔭 Outside diff range comments (1)
docs/troublshooting/changelog.mdx (1)

1-4: Directory is miss-spelled – navigation will break

The file lives under docs/troublshooting/… (missing an “e” after the l).
Any internal links generated by docs.page (and any manual links someone might write) will 404.

Please rename the folder to docs/troubleshooting/ (and adjust any references) before publishing.

♻️ Duplicate comments (1)
docs/troublshooting/common_issues.mdx (1)

1-20: Folder name typo already flagged above

The troublshooting directory mismatch with the sidebar has been reported in docs.json. Fixing it there will resolve the issue here as well.

🧹 Nitpick comments (10)
docs/contributing/contributors.mdx (1)

5-5: Minor wording tweak for a more formal tone

“awesome people” is friendly but a bit colloquial for documentation.
Consider “contributors” or “community members” instead.

-See these awesome people in [README.md](https://github.com/Arenukvern/mcp_flutter#-contributors)
+See the full list in [README.md](https://github.com/Arenukvern/mcp_flutter#-contributors)
docs/index.mdx (1)

7-10: Inconsistent pluralisation and repeated wording

The first bullet reads “Take screenshot” while the second bullet also lists screenshots again.
Perhaps consolidate and use plural for clarity.

-- Take screenshot
+- Take screenshots
-  - Inspect your app, read runtime data, detect errors, take screenshots, and run custom tools you define.
+  - Inspect your app, read runtime data, detect errors, and run custom tools you define.
docs/contributing/contirbution_guide.mdx (1)

25-27: Stronger wording

Swap “make sure that” for “ensure” to keep prose concise.

-Before submitting a pull request, please make sure that:
+Before submitting a pull request, please ensure that:
docs/core/mcp_configuration.mdx (2)

17-19: Sentence fragments inside the table descriptions

Rows 17-18 start with a verb but lack a subject, e.g. “Can be …”.
Prefix with “It” or rephrase for grammatical completeness.


32-45: JSON sample contains comments – not valid JSON

Using json syntax highlighting while embedding // … comments will confuse some renderers.
Switch to jsonc (JSON with comments) or remove the comments.

-```json
+```jsonc
docs/guides/debugging_workflow.mdx (1)

11-26: Numbering jump caused by commented-out step

With step 2 commented out, the rendered list shows 1, 3, 4, 5. Either keep every item as 1. (Markdown auto-numbers) or re-enable / renumber step 2.

-3.  **Identify the Problem**
+2.  **Identify the Problem**

Do the same for subsequent steps.

docs/core/built_in_tools.mdx (1)

22-24: Consider formatting resource URLs as code blocks

Long “visual://” URLs wrap awkwardly in narrow viewports. Surround them with back-ticks for readability:

-**`visual://localhost/app/errors/latest`**
+`visual://localhost/app/errors/latest`

Same for the other two URLs.

docs/contributing/docs_maintenance.mdx (1)

15-18: Add a concrete local-preview command for faster onboarding

A one-liner such as npx docs-page preview (or the equivalent Yarn/Pnpm variant) would save new contributors time hunting for the correct CLI. Consider appending it to the “Preview Locally” bullet.

docs/getting_started/manual_client_setup.mdx (1)

30-34: Tone nit—excessive exclamation marks

The enthusiastic “You’re ready!” appears four times across the file. Trim a couple to keep a professional tone and avoid the style warning flagged by LanguageTool.

docs/core/project_architecture.mdx (1)

24-32: Add explicit language identifier for the ASCII diagram block

Without a language tag, Markdown processors sometimes mangle ASCII art (smart-quotes, emoji replacement, etc.).
Treat it as plain text to keep the characters intact.

-``` 
+```text
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 06822a4 and d31054a.

⛔ Files ignored due to path filters (1)
  • docs/core/architecture.png is excluded by !**/*.png
📒 Files selected for processing (17)
  • docs/contributing/contirbution_guide.mdx (1 hunks)
  • docs/contributing/contributors.mdx (1 hunks)
  • docs/contributing/docs_maintenance.mdx (1 hunks)
  • docs/core/built_in_tools.mdx (1 hunks)
  • docs/core/dynamic_tools_registry.mdx (1 hunks)
  • docs/core/mcp_configuration.mdx (1 hunks)
  • docs/core/project_architecture.mdx (1 hunks)
  • docs/docs.json (1 hunks)
  • docs/getting_started/llm_install_files.mdx (1 hunks)
  • docs/getting_started/manual_client_setup.mdx (1 hunks)
  • docs/getting_started/manual_installation.mdx (1 hunks)
  • docs/guides/creating_dynamic_tools.mdx (1 hunks)
  • docs/guides/debugging_workflow.mdx (1 hunks)
  • docs/index.mdx (1 hunks)
  • docs/troublshooting/changelog.mdx (1 hunks)
  • docs/troublshooting/common_issues.mdx (1 hunks)
  • mcp_server_dart/.env.sample (0 hunks)
💤 Files with no reviewable changes (1)
  • mcp_server_dart/.env.sample
🧰 Additional context used
🧠 Learnings (14)
📓 Common learnings
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When creating dynamic tools for the Flutter Inspector MCP Server, define each tool as an MCPCallEntry using the .tool or .resource constructor, providing a handler function and a definition object (MCPToolDefinition or MCPResourceDefinition).
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/dart_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:23.120Z
Learning: Document all public APIs with precise, future-proof dartdoc comments, including cross-references, usage examples, and relationships between components. Use {@template} and {@macro} for reusable documentation snippets.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: The MCP server exposes registered tools and resources via listClientToolsAndResources, runClientTool, and runClientResource, making them immediately available after registration.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/create_jules_plan.mdc:0-0
Timestamp: 2025-06-25T13:52:57.828Z
Learning: When environment setup is required for Dart/Flutter projects, provide explicit, copy-paste-ready shell commands for both FVM-based and non-FVM-based Flutter setups, including installing Dart SDK, configuring PATH, installing FVM (if needed), and fetching dependencies.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When integrating tools, initialize MCPToolkitBinding before registering tools, and ensure registration occurs before runApp().
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: To access Flutter context in a tool, use WidgetsBinding.instance.rootElement, and handle the case where context may be null by returning an appropriate error in MCPCallResult.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/flutter_ui_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:30.729Z
Learning: For single-class Flutter widgets, use inline comments instead of class-level documentation. Reserve detailed documentation for public APIs and complex widgets, and focus comments on explaining the 'why' rather than the 'what'.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/dart_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:23.120Z
Learning: In Dart and Flutter projects, always use explicit type declarations and follow Dart naming conventions (PascalCase for classes, camelCase for variables and functions) to ensure code clarity and maintainability.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/flutter_ui_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:30.729Z
Learning: In Flutter .dart files, prefer fewer, more cohesive widgets over many tiny widgets. Extract new widget classes only when they are reused in multiple places, are complex enough to warrant separation (over 50 lines), or are logically independent with clear boundaries.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/training.mdc:0-0
Timestamp: 2025-06-25T13:54:36.421Z
Learning: In projects using the Semantic Intent Paradigm (SIP) with Flutter and Dart, all development should begin with a well-defined SemanticIntent YAML definition, which captures the intended meaning and drives subsequent code, UI, and test generation.
docs/core/mcp_configuration.mdx (3)
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When creating dynamic tools for the Flutter Inspector MCP Server, define each tool as an MCPCallEntry using the .tool or .resource constructor, providing a handler function and a definition object (MCPToolDefinition or MCPResourceDefinition).
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/dart_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:23.120Z
Learning: Document all public APIs with precise, future-proof dartdoc comments, including cross-references, usage examples, and relationships between components. Use {@template} and {@macro} for reusable documentation snippets.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: The MCP server exposes registered tools and resources via listClientToolsAndResources, runClientTool, and runClientResource, making them immediately available after registration.
docs/getting_started/llm_install_files.mdx (3)
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/create_jules_plan.mdc:0-0
Timestamp: 2025-06-25T13:52:57.828Z
Learning: Instruct the AI Agent to always begin plans with 'Branch & Environment Setup' steps: (1) create a new branch from the default branch, and (2) run the provided environment setup scripts to ensure Dart, FVM, and Flutter are correctly installed and configured.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When creating dynamic tools for the Flutter Inspector MCP Server, define each tool as an MCPCallEntry using the .tool or .resource constructor, providing a handler function and a definition object (MCPToolDefinition or MCPResourceDefinition).
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/create_jules_plan.mdc:0-0
Timestamp: 2025-06-25T13:52:57.828Z
Learning: When environment setup is required for Dart/Flutter projects, provide explicit, copy-paste-ready shell commands for both FVM-based and non-FVM-based Flutter setups, including installing Dart SDK, configuring PATH, installing FVM (if needed), and fetching dependencies.
docs/index.mdx (6)
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/dart_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:23.120Z
Learning: Document all public APIs with precise, future-proof dartdoc comments, including cross-references, usage examples, and relationships between components. Use {@template} and {@macro} for reusable documentation snippets.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When creating dynamic tools for the Flutter Inspector MCP Server, define each tool as an MCPCallEntry using the .tool or .resource constructor, providing a handler function and a definition object (MCPToolDefinition or MCPResourceDefinition).
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/flutter_ui_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:30.729Z
Learning: For single-class Flutter widgets, use inline comments instead of class-level documentation. Reserve detailed documentation for public APIs and complex widgets, and focus comments on explaining the 'why' rather than the 'what'.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: To access Flutter context in a tool, use WidgetsBinding.instance.rootElement, and handle the case where context may be null by returning an appropriate error in MCPCallResult.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When integrating tools, initialize MCPToolkitBinding before registering tools, and ensure registration occurs before runApp().
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: The MCP server exposes registered tools and resources via listClientToolsAndResources, runClientTool, and runClientResource, making them immediately available after registration.
docs/contributing/contirbution_guide.mdx (4)
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/dart_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:23.120Z
Learning: In Dart and Flutter projects, always use explicit type declarations and follow Dart naming conventions (PascalCase for classes, camelCase for variables and functions) to ensure code clarity and maintainability.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When creating dynamic tools for the Flutter Inspector MCP Server, define each tool as an MCPCallEntry using the .tool or .resource constructor, providing a handler function and a definition object (MCPToolDefinition or MCPResourceDefinition).
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/create_jules_plan.mdc:0-0
Timestamp: 2025-06-25T13:52:57.828Z
Learning: When environment setup is required for Dart/Flutter projects, provide explicit, copy-paste-ready shell commands for both FVM-based and non-FVM-based Flutter setups, including installing Dart SDK, configuring PATH, installing FVM (if needed), and fetching dependencies.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/dart_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:23.120Z
Learning: Document all public APIs with precise, future-proof dartdoc comments, including cross-references, usage examples, and relationships between components. Use {@template} and {@macro} for reusable documentation snippets.
docs/getting_started/manual_client_setup.mdx (6)
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/dart_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:23.120Z
Learning: Document all public APIs with precise, future-proof dartdoc comments, including cross-references, usage examples, and relationships between components. Use {@template} and {@macro} for reusable documentation snippets.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When creating dynamic tools for the Flutter Inspector MCP Server, define each tool as an MCPCallEntry using the .tool or .resource constructor, providing a handler function and a definition object (MCPToolDefinition or MCPResourceDefinition).
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/create_jules_plan.mdc:0-0
Timestamp: 2025-06-25T13:52:57.828Z
Learning: Instruct the AI Agent to always begin plans with 'Branch & Environment Setup' steps: (1) create a new branch from the default branch, and (2) run the provided environment setup scripts to ensure Dart, FVM, and Flutter are correctly installed and configured.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: The MCP server exposes registered tools and resources via listClientToolsAndResources, runClientTool, and runClientResource, making them immediately available after registration.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When integrating tools, initialize MCPToolkitBinding before registering tools, and ensure registration occurs before runApp().
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/create_jules_plan.mdc:0-0
Timestamp: 2025-06-25T13:52:57.828Z
Learning: When environment setup is required for Dart/Flutter projects, provide explicit, copy-paste-ready shell commands for both FVM-based and non-FVM-based Flutter setups, including installing Dart SDK, configuring PATH, installing FVM (if needed), and fetching dependencies.
docs/troublshooting/common_issues.mdx (4)
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When creating dynamic tools for the Flutter Inspector MCP Server, define each tool as an MCPCallEntry using the .tool or .resource constructor, providing a handler function and a definition object (MCPToolDefinition or MCPResourceDefinition).
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When integrating tools, initialize MCPToolkitBinding before registering tools, and ensure registration occurs before runApp().
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: The MCP server exposes registered tools and resources via listClientToolsAndResources, runClientTool, and runClientResource, making them immediately available after registration.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: To access Flutter context in a tool, use WidgetsBinding.instance.rootElement, and handle the case where context may be null by returning an appropriate error in MCPCallResult.
docs/docs.json (1)
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/dart_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:23.120Z
Learning: Document all public APIs with precise, future-proof dartdoc comments, including cross-references, usage examples, and relationships between components. Use {@template} and {@macro} for reusable documentation snippets.
docs/core/built_in_tools.mdx (7)
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When creating dynamic tools for the Flutter Inspector MCP Server, define each tool as an MCPCallEntry using the .tool or .resource constructor, providing a handler function and a definition object (MCPToolDefinition or MCPResourceDefinition).
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/dart_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:23.120Z
Learning: Document all public APIs with precise, future-proof dartdoc comments, including cross-references, usage examples, and relationships between components. Use {@template} and {@macro} for reusable documentation snippets.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: To access Flutter context in a tool, use WidgetsBinding.instance.rootElement, and handle the case where context may be null by returning an appropriate error in MCPCallResult.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/create_jules_plan.mdc:0-0
Timestamp: 2025-06-25T13:52:57.828Z
Learning: When environment setup is required for Dart/Flutter projects, provide explicit, copy-paste-ready shell commands for both FVM-based and non-FVM-based Flutter setups, including installing Dart SDK, configuring PATH, installing FVM (if needed), and fetching dependencies.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: The MCP server exposes registered tools and resources via listClientToolsAndResources, runClientTool, and runClientResource, making them immediately available after registration.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: Dynamic tools can be registered and discovered at runtime without restarting the app, and changes can be applied using hot reload.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When integrating tools, initialize MCPToolkitBinding before registering tools, and ensure registration occurs before runApp().
docs/guides/creating_dynamic_tools.mdx (4)
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When creating dynamic tools for the Flutter Inspector MCP Server, define each tool as an MCPCallEntry using the .tool or .resource constructor, providing a handler function and a definition object (MCPToolDefinition or MCPResourceDefinition).
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: The MCP server exposes registered tools and resources via listClientToolsAndResources, runClientTool, and runClientResource, making them immediately available after registration.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When integrating tools, initialize MCPToolkitBinding before registering tools, and ensure registration occurs before runApp().
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: Dynamic tools can be registered and discovered at runtime without restarting the app, and changes can be applied using hot reload.
docs/guides/debugging_workflow.mdx (4)
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/flutter_ui_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:30.729Z
Learning: For single-class Flutter widgets, use inline comments instead of class-level documentation. Reserve detailed documentation for public APIs and complex widgets, and focus comments on explaining the 'why' rather than the 'what'.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: To access Flutter context in a tool, use WidgetsBinding.instance.rootElement, and handle the case where context may be null by returning an appropriate error in MCPCallResult.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/create_jules_plan.mdc:0-0
Timestamp: 2025-06-25T13:52:57.828Z
Learning: Instruct the AI Agent to always begin plans with 'Branch & Environment Setup' steps: (1) create a new branch from the default branch, and (2) run the provided environment setup scripts to ensure Dart, FVM, and Flutter are correctly installed and configured.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/flutter_ui_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:30.729Z
Learning: Use section comments in Flutter widget build methods to delineate logical UI parts, such as // Header section, // Title, and // Subtitle, to improve readability and maintainability.
docs/getting_started/manual_installation.mdx (8)
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/create_jules_plan.mdc:0-0
Timestamp: 2025-06-25T13:52:57.828Z
Learning: When environment setup is required for Dart/Flutter projects, provide explicit, copy-paste-ready shell commands for both FVM-based and non-FVM-based Flutter setups, including installing Dart SDK, configuring PATH, installing FVM (if needed), and fetching dependencies.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When providing code for manual integration, include a complete Dart snippet, clear instructions, placement recommendations, and execution order requirements.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/dart_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:23.120Z
Learning: Document all public APIs with precise, future-proof dartdoc comments, including cross-references, usage examples, and relationships between components. Use {@template} and {@macro} for reusable documentation snippets.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When creating dynamic tools for the Flutter Inspector MCP Server, define each tool as an MCPCallEntry using the .tool or .resource constructor, providing a handler function and a definition object (MCPToolDefinition or MCPResourceDefinition).
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/create_jules_plan.mdc:0-0
Timestamp: 2025-06-25T13:52:57.828Z
Learning: Instruct the AI Agent to always begin plans with 'Branch & Environment Setup' steps: (1) create a new branch from the default branch, and (2) run the provided environment setup scripts to ensure Dart, FVM, and Flutter are correctly installed and configured.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When integrating tools, initialize MCPToolkitBinding before registering tools, and ensure registration occurs before runApp().
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: To access Flutter context in a tool, use WidgetsBinding.instance.rootElement, and handle the case where context may be null by returning an appropriate error in MCPCallResult.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: The MCP server exposes registered tools and resources via listClientToolsAndResources, runClientTool, and runClientResource, making them immediately available after registration.
docs/core/project_architecture.mdx (6)
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/dart_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:23.120Z
Learning: Document all public APIs with precise, future-proof dartdoc comments, including cross-references, usage examples, and relationships between components. Use {@template} and {@macro} for reusable documentation snippets.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When creating dynamic tools for the Flutter Inspector MCP Server, define each tool as an MCPCallEntry using the .tool or .resource constructor, providing a handler function and a definition object (MCPToolDefinition or MCPResourceDefinition).
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: The MCP server exposes registered tools and resources via listClientToolsAndResources, runClientTool, and runClientResource, making them immediately available after registration.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: To access Flutter context in a tool, use WidgetsBinding.instance.rootElement, and handle the case where context may be null by returning an appropriate error in MCPCallResult.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When integrating tools, initialize MCPToolkitBinding before registering tools, and ensure registration occurs before runApp().
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/create_jules_plan.mdc:0-0
Timestamp: 2025-06-25T13:52:57.828Z
Learning: When environment setup is required for Dart/Flutter projects, provide explicit, copy-paste-ready shell commands for both FVM-based and non-FVM-based Flutter setups, including installing Dart SDK, configuring PATH, installing FVM (if needed), and fetching dependencies.
docs/core/dynamic_tools_registry.mdx (8)
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When creating dynamic tools for the Flutter Inspector MCP Server, define each tool as an MCPCallEntry using the .tool or .resource constructor, providing a handler function and a definition object (MCPToolDefinition or MCPResourceDefinition).
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: Dynamic tools can be registered and discovered at runtime without restarting the app, and changes can be applied using hot reload.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When integrating tools, initialize MCPToolkitBinding before registering tools, and ensure registration occurs before runApp().
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: The MCP server exposes registered tools and resources via listClientToolsAndResources, runClientTool, and runClientResource, making them immediately available after registration.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/dart_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:23.120Z
Learning: Document all public APIs with precise, future-proof dartdoc comments, including cross-references, usage examples, and relationships between components. Use {@template} and {@macro} for reusable documentation snippets.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: Always wrap tool registration (addMcpTool) in an if (kDebugMode) check to ensure tools are only available in debug builds.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: To access Flutter context in a tool, use WidgetsBinding.instance.rootElement, and handle the case where context may be null by returning an appropriate error in MCPCallResult.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When providing code for manual integration, include a complete Dart snippet, clear instructions, placement recommendations, and execution order requirements.
🪛 LanguageTool
docs/contributing/contributors.mdx

[style] ~5-~5: Consider using a more formal and expressive alternative to ‘awesome’.
Context: ... making this project better! See these awesome people in [README.md](https://github.co...

(AWESOME)

docs/core/mcp_configuration.mdx

[style] ~17-~17: To form a complete sentence, be sure to include a subject.
Context: ...el| The logging level for the server. Can bedebug, info, notice, warning`...

(MISSING_IT_THERE)


[style] ~18-~18: To form a complete sentence, be sure to include a subject.
Context: ...--environment | The environment mode. Can be development or production. Defau...

(MISSING_IT_THERE)

docs/contributing/contirbution_guide.mdx

[style] ~3-~3: Consider using a less common alternative to make your writing sound more unique and professional.
Context: ...ntributions to the Flutter MCP Toolkit! Please feel free to submit pull requests or report issues o...

(FEEL_FREE_TO_STYLE_ME)


[style] ~23-~23: Consider using a different verb to strengthen your wording.
Context: ...efore submitting a pull request, please make sure that: - The code is well-formatted and...

(MAKE_SURE_ENSURE)

docs/getting_started/manual_client_setup.mdx

[style] ~119-~119: Using many exclamation marks might seem excessive (in this case: 4 exclamation marks for a text that’s 2045 characters long)
Context: ...utomatically available. 4. You're ready! Try commands like "List all available t...

(EN_EXCESSIVE_EXCLAMATION)

🔇 Additional comments (5)
docs/contributing/contirbution_guide.mdx (1)

11-13: Repository path likely incorrect

cd mcp_toolkit/mcp_toolkit assumes a nested folder that may not exist.
If the package sits directly in the root, a single cd is enough:

-    cd mcp_toolkit/mcp_toolkit && dart pub get
+    cd mcp_toolkit && dart pub get
docs/getting_started/llm_install_files.mdx (1)

3-6: Review comment incorrect: link is valid
The file llm_install.md still exists at the repository root, so the URL
https://github.com/Arenukvern/mcp_flutter/blob/main/llm_install.md
does not 404. No update to the prompts is required.

Likely an incorrect or invalid review comment.

docs/docs.json (1)

71-73: File referenced in sidebar is missing

/troubleshooting/claude_code_issues (or troublshooting/claude_code_issues) is not part of this PR. Add the file or remove the entry to avoid a dead link.

docs/core/project_architecture.mdx (2)

5-8: Broken relative link to Installation Guide

../../llm_install.md does not exist in the new docs/ hierarchy (the file was renamed in previous commits). Readers will hit a 404.

- - [Installation Guide](../../llm_install.md)
+ - [Installation Guide](../installation.mdx)   <!-- adjust to the actual location -->

Please verify the correct path and update accordingly.


136-142: Ensure Mermaid rendering is enabled on docs.page

The file embeds a Mermaid diagram, but docs.page only renders Mermaid when the plugin is turned on in docs.json (or via front-matter). If disabled, users will just see raw source.

Confirm the build pipeline renders Mermaid or add a PNG/SVG fallback.

Comment on lines +5 to +8
### 1. Set Up Your Project

Make sure you have followed the [Quick Start](Quick_Start.md) guide and have the MCP server and a Flutter app running.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Broken “Quick Start” hyperlink

[Quick Start](Quick_Start.md) points to a file that doesn’t exist in this PR (the actual guide is getting_started/manual_installation.mdx). Readers will hit a 404.

-Make sure you have followed the [Quick Start](Quick_Start.md) guide …
+Make sure you have followed the [Quick Start](../getting_started/manual_installation.mdx) guide …
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
### 1. Set Up Your Project
Make sure you have followed the [Quick Start](Quick_Start.md) guide and have the MCP server and a Flutter app running.
### 1. Set Up Your Project
Make sure you have followed the [Quick Start](../getting_started/manual_installation.mdx) guide and have the MCP server and a Flutter app running.
🤖 Prompt for AI Agents
In docs/guides/creating_dynamic_tools.mdx around lines 5 to 8, the hyperlink
labeled "Quick Start" incorrectly points to Quick_Start.md, which does not
exist. Update the link target to the correct file path
getting_started/manual_installation.mdx to prevent broken links and ensure
readers can access the intended guide.

Comment on lines +16 to +28
void registerMyTools() {
final helloTool = MCPCallEntry.tool(
handler: (params) {
return MCPCallResult(message: 'Hello from a dynamic tool!');
},
definition: MCPToolDefinition(
name: 'hello',
description: 'A simple tool that says hello.',
),
);

addMcpTool(helloTool);
}
Copy link

@coderabbitai coderabbitai bot Jul 15, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Gate dynamic-tool registration behind kDebugMode

Exposing custom tools in release builds is a security & bundle-size concern. The snippets in the rest of the docs recommend wrapping addMcpTool in a kDebugMode check, but this example omits it.

+import 'package:flutter/foundation.dart'; // add

 void registerMyTools() {
   final helloTool = MCPCallEntry.tool(
     handler: (params) {
       return MCPCallResult(message: 'Hello from a dynamic tool!');
     },
     definition: MCPToolDefinition(
       name: 'hello',
       description: 'A simple tool that says hello.',
     ),
   );

-  addMcpTool(helloTool);
+  if (kDebugMode) {
+    addMcpTool(helloTool);
+  }
 }
🤖 Prompt for AI Agents
In docs/guides/creating_dynamic_tools.mdx between lines 16 and 28, the example
registers a dynamic tool without wrapping the addMcpTool call in a kDebugMode
check. To fix this, wrap the addMcpTool(helloTool) call inside an if
(kDebugMode) { ... } block to ensure the tool registration only occurs in debug
builds, preventing exposure in release builds and reducing bundle size.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not needed since addEntries wrapped in assert

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Search for the implementation of addMcpTool function
ast-grep --pattern 'addMcpTool($_) {
  $$$
}'

# Also search for addEntries implementation
ast-grep --pattern 'addEntries($_) {
  $$$
}'

# Search for any assert statements related to tool registration
rg 'assert.*addMcpTool|assert.*addEntries|addMcpTool.*assert|addEntries.*assert' -A 5 -B 5

Length of output: 188


🏁 Script executed:

#!/bin/bash
# Search for addMcpTool function definition more broadly
rg 'addMcpTool' -A 10 -B 5

# Search for addEntries function definition
rg 'addEntries' -A 10 -B 5

# Search for any assert statements in the toolkit
rg 'assert' --type dart -A 3 -B 3

Length of output: 58506


🏁 Script executed:

#!/bin/bash
# Let's look specifically at the addEntries method implementation to see the assert wrapper
rg -A 10 -B 5 "Future<void> addEntries" --type dart

Length of output: 1455


@Arenukvern You're absolutely right! I can see in the addEntries implementation that the tool registration is indeed wrapped in an assert() block:

Future<void> addEntries({required final Set<MCPCallEntry> entries}) async {
  assert(() {
    initializeServiceExtensions(errorMonitor: this, entries: entries);
    return true;
  }());
}

Since addMcpTool calls addEntries, and assert() statements are only executed in debug mode (stripped from release builds), this already provides the security protection I was concerned about. My suggestion for the kDebugMode check was redundant.

Thank you for the clarification!


✏️ Learnings added
Learnt from: Arenukvern
PR: Arenukvern/mcp_flutter#61
File: docs/guides/creating_dynamic_tools.mdx:16-28
Timestamp: 2025-07-22T16:52:15.671Z
Learning: In the MCP Flutter toolkit, tool registration via addMcpTool() and addEntries() is already wrapped in assert() blocks, which ensures tools are only registered in debug builds and stripped from release builds, providing the same security as kDebugMode checks.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.


🧠 Learnings used
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When creating dynamic tools for the Flutter Inspector MCP Server, define each tool as an MCPCallEntry using the .tool or .resource constructor, providing a handler function and a definition object (MCPToolDefinition or MCPResourceDefinition).

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: The MCP server exposes registered tools and resources via listClientToolsAndResources, runClientTool, and runClientResource, making them immediately available after registration.

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When integrating tools, initialize MCPToolkitBinding before registering tools, and ensure registration occurs before runApp().

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: Dynamic tools can be registered and discovered at runtime without restarting the app, and changes can be applied using hot reload.

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: Always wrap tool registration (addMcpTool) in an if (kDebugMode) check to ensure tools are only available in debug builds.

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: To access Flutter context in a tool, use WidgetsBinding.instance.rootElement, and handle the case where context may be null by returning an appropriate error in MCPCallResult.

Comment on lines +74 to +99
import 'package:mcp_toolkit/mcp_toolkit.dart';

void registerGreetingTool() {
final greetingTool = MCPCallEntry.tool(
handler: (params) {
final name = params['name'] as String? ?? 'World';
return MCPCallResult(message: 'Hello, $name!');
},
definition: MCPToolDefinition(
name: 'greeting',
description: 'Returns a greeting.',
inputSchema: {
'type': 'object',
'properties': {
'name': {
'type': 'string',
'description': 'The name to include in the greeting.',
},
},
},
),
);

addMcpTool(greetingTool);
}
```
Copy link

@coderabbitai coderabbitai bot Jul 15, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Use debug gating in sample code for consistency & safety

All earlier best-practice notes emphasise wrapping tool registration in kDebugMode. The primary “Basic Example” contradicts that advice and may confuse readers.

-import 'package:mcp_toolkit/mcp_toolkit.dart';
+import 'package:flutter/foundation.dart';
+import 'package:mcp_toolkit/mcp_toolkit.dart';-  addMcpTool(greetingTool);
+  if (kDebugMode) {
+    addMcpTool(greetingTool);
+  }
🤖 Prompt for AI Agents
In docs/core/dynamic_tools_registry.mdx around lines 74 to 99, the sample code
for registering the greeting tool lacks the recommended debug gating with
kDebugMode, which is inconsistent with earlier best-practice notes. Wrap the
entire registerGreetingTool function call or its contents inside a conditional
check for kDebugMode to ensure the tool registration only occurs in debug mode,
maintaining consistency and safety in the example.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not needed since addEntries wrapped in assert

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧩 Analysis chain

@Arenukvern, let me verify the implementation details to understand the current debug protection mechanism.


🏁 Script executed:

#!/bin/bash
# Search for addMcpTool and addEntries implementations to verify the assert wrapping
ast-grep --pattern $'addMcpTool($_) {
  $$$
}'

# Also search for addEntries method implementation
ast-grep --pattern $'addEntries($_) {
  $$$
}'

# Search for any assert statements around these methods
rg -A 5 -B 5 "addMcpTool|addEntries" --type dart

Length of output: 20744


@Arenukvern, you're absolutely right! Thank you for the clarification.

Looking at the implementation in mcp_toolkit_binding.dart, I can see that addEntries() wraps the actual service extension registration inside an assert() block:

Future<void> addEntries({required final Set<MCPCallEntry> entries}) async {
  assert(() {
    initializeServiceExtensions(errorMonitor: this, entries: entries);
    return true;
  }());
}

Since assert() statements are completely stripped out in release builds, this provides the same debug-only protection as kDebugMode checks, but more elegantly. My suggestion to add kDebugMode wrapping would indeed be redundant.

This is actually a clever design pattern - using assert() for debug-only functionality ensures zero overhead in release builds.


✏️ Learnings added
Learnt from: Arenukvern
PR: Arenukvern/mcp_flutter#61
File: docs/core/dynamic_tools_registry.mdx:74-99
Timestamp: 2025-07-22T16:52:23.017Z
Learning: In the mcp_toolkit, the addEntries() and addMcpTool() methods already have debug-only protection via assert() blocks that wrap the actual service extension registration. This eliminates the need for additional kDebugMode checks in user code, as assert statements are completely stripped from release builds.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.


🧠 Learnings used
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When creating dynamic tools for the Flutter Inspector MCP Server, define each tool as an MCPCallEntry using the .tool or .resource constructor, providing a handler function and a definition object (MCPToolDefinition or MCPResourceDefinition).

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: The MCP server exposes registered tools and resources via listClientToolsAndResources, runClientTool, and runClientResource, making them immediately available after registration.

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When integrating tools, initialize MCPToolkitBinding before registering tools, and ensure registration occurs before runApp().

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: Dynamic tools can be registered and discovered at runtime without restarting the app, and changes can be applied using hot reload.

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: Always wrap tool registration (addMcpTool) in an if (kDebugMode) check to ensure tools are only available in debug builds.

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: To access Flutter context in a tool, use WidgetsBinding.instance.rootElement, and handle the case where context may be null by returning an appropriate error in MCPCallResult.

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/flutter_ui_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:30.729Z
Learning: In Flutter .dart files, prefer fewer, more cohesive widgets over many tiny widgets. Extract new widget classes only when they are reused in multiple places, are complex enough to warrant separation (over 50 lines), or are logically independent with clear boundaries.

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/writing_code_protocol.mdc:0-0
Timestamp: 2025-06-25T13:55:18.462Z
Learning: When writing Dart code, always place mock, test, and implementation files exactly near their corresponding intent file to maintain locality and clarity.

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/test_guide.mdc:0-0
Timestamp: 2025-06-25T13:54:16.398Z
Learning: In Dart test files (matching *_test.dart), using data-driven approaches with maps and iterating over cases using forEach helps minimize boilerplate and makes tests easier to extend.

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/dart_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:23.120Z
Learning: Document all public APIs with precise, future-proof dartdoc comments, including cross-references, usage examples, and relationships between components. Use {@template} and {@macro} for reusable documentation snippets.

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/flutter_ui_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:30.729Z
Learning: For single-class Flutter widgets, use inline comments instead of class-level documentation. Reserve detailed documentation for public APIs and complex widgets, and focus comments on explaining the 'why' rather than the 'what'.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7b634c9 and 842a9d7.

📒 Files selected for processing (7)
  • docs.json (1 hunks)
  • docs/contributing/contribution_guide.mdx (1 hunks)
  • docs/getting_started/llm_install_files.mdx (1 hunks)
  • docs/getting_started/manual_installation.mdx (1 hunks)
  • docs/index.mdx (1 hunks)
  • docs/troubleshooting/changelog.mdx (1 hunks)
  • docs/troubleshooting/common_issues.mdx (1 hunks)
🧠 Learnings (3)
📓 Common learnings
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/dart_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:23.120Z
Learning: Document all public APIs with precise, future-proof dartdoc comments, including cross-references, usage examples, and relationships between components. Use {@template} and {@macro} for reusable documentation snippets.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/flutter_ui_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:30.729Z
Learning: For single-class Flutter widgets, use inline comments instead of class-level documentation. Reserve detailed documentation for public APIs and complex widgets, and focus comments on explaining the 'why' rather than the 'what'.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/create_jules_plan.mdc:0-0
Timestamp: 2025-06-25T13:52:57.828Z
Learning: When environment setup is required for Dart/Flutter projects, provide explicit, copy-paste-ready shell commands for both FVM-based and non-FVM-based Flutter setups, including installing Dart SDK, configuring PATH, installing FVM (if needed), and fetching dependencies.
docs/index.mdx (6)

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/dart_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:23.120Z
Learning: Document all public APIs with precise, future-proof dartdoc comments, including cross-references, usage examples, and relationships between components. Use {@template} and {@macro} for reusable documentation snippets.

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When creating dynamic tools for the Flutter Inspector MCP Server, define each tool as an MCPCallEntry using the .tool or .resource constructor, providing a handler function and a definition object (MCPToolDefinition or MCPResourceDefinition).

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/flutter_ui_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:30.729Z
Learning: For single-class Flutter widgets, use inline comments instead of class-level documentation. Reserve detailed documentation for public APIs and complex widgets, and focus comments on explaining the 'why' rather than the 'what'.

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: To access Flutter context in a tool, use WidgetsBinding.instance.rootElement, and handle the case where context may be null by returning an appropriate error in MCPCallResult.

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: The MCP server exposes registered tools and resources via listClientToolsAndResources, runClientTool, and runClientResource, making them immediately available after registration.

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When integrating tools, initialize MCPToolkitBinding before registering tools, and ensure registration occurs before runApp().

docs/contributing/contribution_guide.mdx (4)

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/dart_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:23.120Z
Learning: Document all public APIs with precise, future-proof dartdoc comments, including cross-references, usage examples, and relationships between components. Use {@template} and {@macro} for reusable documentation snippets.

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/dart_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:23.120Z
Learning: In Dart and Flutter projects, always use explicit type declarations and follow Dart naming conventions (PascalCase for classes, camelCase for variables and functions) to ensure code clarity and maintainability.

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When creating dynamic tools for the Flutter Inspector MCP Server, define each tool as an MCPCallEntry using the .tool or .resource constructor, providing a handler function and a definition object (MCPToolDefinition or MCPResourceDefinition).

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/create_jules_plan.mdc:0-0
Timestamp: 2025-06-25T13:52:57.828Z
Learning: When environment setup is required for Dart/Flutter projects, provide explicit, copy-paste-ready shell commands for both FVM-based and non-FVM-based Flutter setups, including installing Dart SDK, configuring PATH, installing FVM (if needed), and fetching dependencies.

🪛 LanguageTool
docs/contributing/contribution_guide.mdx

[style] ~3-~3: Consider using a less common alternative to make your writing sound more unique and professional.
Context: ...ntributions to the Flutter MCP Toolkit! Please feel free to submit pull requests or report issues o...

(FEEL_FREE_TO_STYLE_ME)


[style] ~23-~23: Consider using a different verb to strengthen your wording.
Context: ...efore submitting a pull request, please make sure that: - The code is well-formatted and...

(MAKE_SURE_ENSURE)

✅ Files skipped from review due to trivial changes (3)
  • docs/troubleshooting/changelog.mdx
  • docs/troubleshooting/common_issues.mdx
  • docs.json
🚧 Files skipped from review as they are similar to previous changes (2)
  • docs/getting_started/llm_install_files.mdx
  • docs/getting_started/manual_installation.mdx
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/dart_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:23.120Z
Learning: Document all public APIs with precise, future-proof dartdoc comments, including cross-references, usage examples, and relationships between components. Use {@template} and {@macro} for reusable documentation snippets.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/flutter_ui_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:30.729Z
Learning: For single-class Flutter widgets, use inline comments instead of class-level documentation. Reserve detailed documentation for public APIs and complex widgets, and focus comments on explaining the 'why' rather than the 'what'.
Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/create_jules_plan.mdc:0-0
Timestamp: 2025-06-25T13:52:57.828Z
Learning: When environment setup is required for Dart/Flutter projects, provide explicit, copy-paste-ready shell commands for both FVM-based and non-FVM-based Flutter setups, including installing Dart SDK, configuring PATH, installing FVM (if needed), and fetching dependencies.
docs/index.mdx (6)

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/dart_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:23.120Z
Learning: Document all public APIs with precise, future-proof dartdoc comments, including cross-references, usage examples, and relationships between components. Use {@template} and {@macro} for reusable documentation snippets.

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When creating dynamic tools for the Flutter Inspector MCP Server, define each tool as an MCPCallEntry using the .tool or .resource constructor, providing a handler function and a definition object (MCPToolDefinition or MCPResourceDefinition).

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/flutter_ui_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:30.729Z
Learning: For single-class Flutter widgets, use inline comments instead of class-level documentation. Reserve detailed documentation for public APIs and complex widgets, and focus comments on explaining the 'why' rather than the 'what'.

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: To access Flutter context in a tool, use WidgetsBinding.instance.rootElement, and handle the case where context may be null by returning an appropriate error in MCPCallResult.

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: The MCP server exposes registered tools and resources via listClientToolsAndResources, runClientTool, and runClientResource, making them immediately available after registration.

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When integrating tools, initialize MCPToolkitBinding before registering tools, and ensure registration occurs before runApp().

docs/contributing/contribution_guide.mdx (4)

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/dart_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:23.120Z
Learning: Document all public APIs with precise, future-proof dartdoc comments, including cross-references, usage examples, and relationships between components. Use {@template} and {@macro} for reusable documentation snippets.

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/dart_dev.mdc:0-0
Timestamp: 2025-06-25T13:53:23.120Z
Learning: In Dart and Flutter projects, always use explicit type declarations and follow Dart naming conventions (PascalCase for classes, camelCase for variables and functions) to ensure code clarity and maintainability.

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/mcp_dynamic_tools.mdc:0-0
Timestamp: 2025-06-25T13:53:43.433Z
Learning: When creating dynamic tools for the Flutter Inspector MCP Server, define each tool as an MCPCallEntry using the .tool or .resource constructor, providing a handler function and a definition object (MCPToolDefinition or MCPResourceDefinition).

Learnt from: CR
PR: Arenukvern/mcp_flutter#0
File: .cursor/rules/create_jules_plan.mdc:0-0
Timestamp: 2025-06-25T13:52:57.828Z
Learning: When environment setup is required for Dart/Flutter projects, provide explicit, copy-paste-ready shell commands for both FVM-based and non-FVM-based Flutter setups, including installing Dart SDK, configuring PATH, installing FVM (if needed), and fetching dependencies.

🪛 LanguageTool
docs/contributing/contribution_guide.mdx

[style] ~3-~3: Consider using a less common alternative to make your writing sound more unique and professional.
Context: ...ntributions to the Flutter MCP Toolkit! Please feel free to submit pull requests or report issues o...

(FEEL_FREE_TO_STYLE_ME)


[style] ~23-~23: Consider using a different verb to strengthen your wording.
Context: ...efore submitting a pull request, please make sure that: - The code is well-formatted and...

(MAKE_SURE_ENSURE)

Comment on lines 10 to 13
```bash
dart pub get
cd mcp_toolkit/mcp_toolkit && dart pub get
```
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Fix duplicate folder segment & fetch all packages

cd mcp_toolkit/mcp_toolkit implies the repo contains a second mcp_toolkit folder, which is unlikely and will 404.
While you’re here, the guide never installs the server package, so a clean clone will still fail dart test.

-    dart pub get
-    cd mcp_toolkit/mcp_toolkit && dart pub get
+    # Root dependencies
+    dart pub get
+
+    # Toolkit package
+    cd mcp_toolkit && dart pub get
+
+    # Server package
+    cd ../mcp_server && dart pub get

Please verify the actual folder names and adjust.


I’d like to verify the actual package folders before updating the guide.


🏁 Script executed:

#!/bin/bash
# Check if nested toolkit folder exists
if [ -d mcp_toolkit/mcp_toolkit ]; then
  echo "✗ Nested folder mcp_toolkit/mcp_toolkit exists"
else
  echo "✓ No nested mcp_toolkit/mcp_toolkit"
fi

# List top-level directories
echo "Top-level dirs:"
ls -1

# Check for individual packages
for pkg in mcp_toolkit mcp_server; do
  if [ -d "$pkg" ]; then
    echo "$pkg exists"
  else
    echo "$pkg missing"
  fi
done

Length of output: 620


I’d like to verify the server package structure before updating the guide.


🏁 Script executed:

#!/bin/bash
# List contents of mcp_server_dart
echo "Contents of mcp_server_dart/:"
ls -1 mcp_server_dart

# Check if nested server folder exists
if [ -d mcp_server_dart/mcp_server_dart ]; then
  echo "✗ Nested folder mcp_server_dart/mcp_server_dart exists"
else
  echo "✓ No nested mcp_server_dart/mcp_server_dart"
fi

Length of output: 326


I want to confirm where the pubspec.yaml for the toolkit package lives before updating the guide.


🏁 Script executed:

#!/bin/bash
# Locate all pubspec.yaml files under mcp_toolkit
find mcp_toolkit -type f -name pubspec.yaml

Length of output: 130


Fix dependency fetch commands and include all packages

The repository has a nested mcp_toolkit/mcp_toolkit folder and a separate mcp_server_dart package, plus a DevTools extension under mcp_toolkit/devtools_mcp_extension. Update the snippet in docs/contributing/contribution_guide.mdx accordingly:

-    ```bash
-    dart pub get
-    cd mcp_toolkit/mcp_toolkit && dart pub get
-    ```
+    ```bash
+    # Root dependencies
+    dart pub get
+
+    # Toolkit core package
+    cd mcp_toolkit/mcp_toolkit
+    dart pub get
+
+    # DevTools extension
+    cd ../devtools_mcp_extension
+    dart pub get
+
+    # Server package
+    cd ../../mcp_server_dart
+    dart pub get
+    ```

• Please verify these paths match your directory structure before merging.

🤖 Prompt for AI Agents
In docs/contributing/contribution_guide.mdx around lines 10 to 13, the current
dependency fetch commands only cover the root and one nested package. Update the
snippet to sequentially run 'dart pub get' in the root, then in
mcp_toolkit/mcp_toolkit, then in mcp_toolkit/devtools_mcp_extension, and finally
in mcp_server_dart, adding comments for clarity. This ensures all packages fetch
dependencies correctly according to the repository structure.

Comment on lines +7 to +9
- Take screenshot
![View Screenshots](/view_screenshots.gif)
- Inspect your app, read runtime data, detect errors, take screenshots, and run custom tools you define.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Broken image – leading slash resolves to site root

/view_screenshots.gif resolves to the domain root, not the docs folder. Use a relative path:

-  ![View Screenshots](/view_screenshots.gif)
+  ![View Screenshots](./view_screenshots.gif)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- Take screenshot
![View Screenshots](/view_screenshots.gif)
- Inspect your app, read runtime data, detect errors, take screenshots, and run custom tools you define.
- Take screenshot
![View Screenshots](./view_screenshots.gif)
- Inspect your app, read runtime data, detect errors, take screenshots, and run custom tools you define.
🤖 Prompt for AI Agents
In docs/index.mdx around lines 7 to 9, the image source path starts with a
leading slash which causes it to resolve to the domain root instead of the docs
folder. Change the image path from an absolute path (/view_screenshots.gif) to a
relative path without the leading slash so it correctly points to the image
location relative to the docs folder.

Comment on lines +17 to +42
- [LLM Auto Install Files](/getting_started/llm_install_files) - Automated setup for AI assistants
- [Manual Installation](/getting_started/manual_installation) - Step-by-step manual setup
- [Manual Client Setup](/getting_started/manual_client_setup) - Configure your AI client

### Guides

- [Creating Dynamic Tools](/guides/creating_dynamic_tools) - Build custom tools for your app
- [Debugging Workflow](/guides/debugging_workflow) - Effective debugging strategies

### Core Concepts

- [Architecture](/core/project_architecture) - System overview and components
- [MCP Configuration](/core/mcp_configuration) - Server configuration and setup
- [Dynamic Tool Registry](/core/dynamic_tools_registry) - Runtime tool registration system
- [Built-in Tools](/core/built_in_tools) - Available tools and capabilities

### Troubleshooting

- [Common Issues](/troubleshooting/common_issues) - Frequent problems and solutions
- [Claude Code Issues](/troubleshooting/claude_code_issues) - Claude-specific troubleshooting

### Contributing

- [Contribution Guide](/contributing/contribution_guide) - How to contribute to the project
- [Contributors](/contributing/contributors) - Project contributors
- [Docs Maintenance](/contributing/docs_maintenance) - Documentation maintenance guide
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Internal links will 404 on docs.page

Every internal link begins with /, which only works if the docs are served from the domain root. On docs.page they’ll be under /Arenukvern/mcp_flutter/…. Drop the leading slash for all intra-repo links.

Example:

- [LLM Auto Install Files](/getting_started/llm_install_files)
+ [LLM Auto Install Files](getting_started/llm_install_files)

Please fix the remainder similarly.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- [LLM Auto Install Files](/getting_started/llm_install_files) - Automated setup for AI assistants
- [Manual Installation](/getting_started/manual_installation) - Step-by-step manual setup
- [Manual Client Setup](/getting_started/manual_client_setup) - Configure your AI client
### Guides
- [Creating Dynamic Tools](/guides/creating_dynamic_tools) - Build custom tools for your app
- [Debugging Workflow](/guides/debugging_workflow) - Effective debugging strategies
### Core Concepts
- [Architecture](/core/project_architecture) - System overview and components
- [MCP Configuration](/core/mcp_configuration) - Server configuration and setup
- [Dynamic Tool Registry](/core/dynamic_tools_registry) - Runtime tool registration system
- [Built-in Tools](/core/built_in_tools) - Available tools and capabilities
### Troubleshooting
- [Common Issues](/troubleshooting/common_issues) - Frequent problems and solutions
- [Claude Code Issues](/troubleshooting/claude_code_issues) - Claude-specific troubleshooting
### Contributing
- [Contribution Guide](/contributing/contribution_guide) - How to contribute to the project
- [Contributors](/contributing/contributors) - Project contributors
- [Docs Maintenance](/contributing/docs_maintenance) - Documentation maintenance guide
- [LLM Auto Install Files](getting_started/llm_install_files) - Automated setup for AI assistants
- [Manual Installation](/getting_started/manual_installation) - Step-by-step manual setup
- [Manual Client Setup](/getting_started/manual_client_setup) - Configure your AI client
### Guides
- [Creating Dynamic Tools](/guides/creating_dynamic_tools) - Build custom tools for your app
- [Debugging Workflow](/guides/debugging_workflow) - Effective debugging strategies
### Core Concepts
- [Architecture](/core/project_architecture) - System overview and components
- [MCP Configuration](/core/mcp_configuration) - Server configuration and setup
- [Dynamic Tool Registry](/core/dynamic_tools_registry) - Runtime tool registration system
- [Built-in Tools](/core/built_in_tools) - Available tools and capabilities
### Troubleshooting
- [Common Issues](/troubleshooting/common_issues) - Frequent problems and solutions
- [Claude Code Issues](/troubleshooting/claude_code_issues) - Claude-specific troubleshooting
### Contributing
- [Contribution Guide](/contributing/contribution_guide) - How to contribute to the project
- [Contributors](/contributing/contributors) - Project contributors
- [Docs Maintenance](/contributing/docs_maintenance) - Documentation maintenance guide
🤖 Prompt for AI Agents
In docs/index.mdx between lines 17 and 42, all internal links currently start
with a leading slash, causing 404 errors on docs.page because the docs are
served under a subpath. Remove the leading slash from each internal link URL so
they are relative paths within the repo, ensuring they work correctly on
docs.page.

@Arenukvern Arenukvern merged commit 90b470d into main Jul 22, 2025
1 check passed
@Arenukvern Arenukvern deleted the feat/docs branch July 22, 2025 16:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant