Introduction
In our previous post, we showed how to build your first MCP server in Dart. This time, let’s explore five MCPs we actually use every day and how they make development smoother: Firebase, Supabase, GitHub, Slack, and Dart/Flutter MCP Servers.
1) Firebase MCP
If you’ve ever managed Firebase projects, you know the pain: debugging live data, updating claims, or quickly flipping a feature flag usually required writing a custom script, installing dependencies, and running it from the command line. Enter the Firebase MCP server, which lets you expose Firebase’s CLI directly to your MCP client. In this case as we normally use Cursor as our IDE we are going to show how this experience is done but you could use any MCP client.
Setup in Cursor
The first step is adding the Firebase MCP server to its config file. Cursor looks for MCP server definitions in .cursor/mcp.json (project-specific) or ~/.cursor/mcp.json (global). Here’s what our config looks like:
Once this is in place, Cursor automatically starts the Firebase MCP server and makes its commands available inside your chat.
📖 Docs: Firebase MCP server docs
Top Capabilities
The Firebase MCP server exposes a set of capabilities via the CLI, including:
- firebase_get_project: Retrieves information about the currently active project.
- auth_set_claim: Sets a custom claim on a specific user’s account.
- firestore_get_rules: Retrieves the active Firestore Security rules.
- firestore_get_documents: Retrieves one or more Firestore documents from a database in the current project by full document paths.
Check the full list of Firebase MCP capabilities
Why It’s a game-changer
Let’s take a real-world example: setting custom claims.
Previously, if you wanted to mark a user as an “admin” in Firebase Auth, you had to write a Node.js script something like:
admin.auth().setCustomUserClaims(uid, { admin: true })
You’d need to install firebase-admin, authenticate, and run the script. A lot of boilerplate for what’s essentially a one-line change.
With MCP, this is now conversational. In Cursor, I can literally type into chat:
“Create a custom claim for user with email “example@gmail.com” , set { admin: true }.”
The MCP server executes it immediately, no script required. In practice, debugging and ad-hoc admin tasks are dramatically smoother. Another great benefit of using MCP’s is that you don’t need to remember commands, you just can communicate in plain english with the agent.
2) Supabase MCP
If Firebase is the household name, Supabase is its open-source twin with some superpowers of its own. It’s built on PostgreSQL, and layers on authentication, storage, real-time subscriptions, and an API that feels familiar to anyone coming from Firebase.
With the Supabase MCP server, we can hook all that into Cursor, letting us query our Postgres-backed data, manage schemas, and debugging flows directly from chat.
📖 Docs: Supabase
Setup in Cursor
Configuring Supabase MCP is just as straightforward as Firebase. Add it to your .cursor/mcp.json (project-specific) or ~/.cursor/mcp.json (global):
Now, whenever you open Cursor, the Supabase MCP server runs in the background, exposing commands from the Supabase CLI.
Capabilities
This are some of the Supabase MCP capabilities:
- list_projects: List all Supabase projects for the user.
- list_tables: List all tables in one or more schemas.
- execute_sql: Execute raw SQL in the Postgres database.
- apply_migration: Applies a migration to the database.
Think of it as giving your IDE direct SQL superpowers, but wrapped with natural-language prompting.
A Possible Flow
For analytics and debugging, Supabase MCP removes the usual friction. Normally, you’d open the Supabase dashboard, then carefully craft queries. With MCP, that happens in-chat and again, using natural language.
Say you want to know “How many users are older than 18 years old” just type it into Cursor, and the MCP server will run the SQL query for you against your live database.

This conversational workflow means you’re never juggling the SQL editor, CLI terminal, and dashboard. It’s all unified in the MCP client you’re already coding in. This of course comes with the cost of us checking whether or not the query was right, however, it’s really fast to get instant insights without spending so much time thinking about the query itself.
You can read more about Supabase MCP here.
3) GitHub MCP
At this point you know the drill: add the MCP server in your .cursor/mcp.json, and your IDE can talk directly to GitHub.
You’ll need to replace YOUR_GITHUB_PAT with your github personal access token. You can refer to this guide for more details on installation.
Github has more tools than other MCP servers we explored, just to name a few:
- search_issues: Search for issues in GitHub repositories using issues search syntax already scoped to is:issue.
- search_repositories: Find GitHub repositories by name, description, readme, topics, or other metadata.
- get_commit: Get details from a commit from a GitHub repository.
- merge_pull_request: Merge a Pull Request in a GitHub repository.
And the list could continue. In fact there are 91 tools available. This makes it easy to do things like:
“ Show me open PRs in my current repository.”
4) Slack MCP
Same story: plug it into your MCP config, and Slack becomes accessible from your IDE. In this case we are using https://github.com/zencoderai/slack-mcp-server the config needed would be:
You can explore the full list in the link however, some things you can do are:
- slack_post_message: Post a new message to a Slack channel
- slack_get_channel_history: Get recent messages from a channel.
- Slack_get_users: Get list of workspace users with basic profile information
A common workflow for us:
“Summarize the last 10 messages in #prod-alerts.”
5) Dart/Flutter MCP
For our last MCP we are going to analyze the Dart/Flutter MCP server which is now stable.
The current capabilities are:
- Analyze and fix code errors
- Resolve symbols, fetch documentation, and signature info
- Introspect and interact with your running app
- Search the pub.dev site for the best package for a use case.
- Manage dependencies in the pubspec.yaml file
- Run tests and analyze the results
- Format code with the same formatter and config as dart format
For a deeper dive into how it can enhance your workflow, check out this article: Supercharge your Dart/Flutter development experience with the Dart MCP server.
This once again unlocks a future where you can describe, in natural language, if there’s a bug in the code and let the LLM, together with the available MCP tools, try to fix it
Conclusions
The pattern across all these MCPs is clear: define them once in your IDE’s config, and your assistant can instantly query, update, and automate the tools you rely on every day.
Yes, the setup can feel a bit cumbersome at first. But these servers are quickly becoming the standard for plug-and-play integrations that enhance workflows and boost productivity. Even more, combining MCPs opens the door to complex automations and creative use cases that go far beyond the basics.
In this blog post, we’ve focused on how to use MCPs in isolation through Cursor. But the potential goes much further, these tools can be combined in creative ways to build complex workflows and automations. At the same time, MCPs lower the barrier for developers who aren’t familiar with CLIs, since they can interact in natural language. This democratizes access to powerful tools and helps teams focus on problem-solving instead of memorizing commands, ultimately driving productivity.
Together, these MCPs reduce friction, minimize context switching, and keep everything in one place: your IDE. Start small with Firebase or Supabase, and you’ll immediately feel the impact. From there, layering in GitHub, Slack, and Dart/Flutter becomes second nature.
MCP is not just a productivity boost, it’s shaping the future of development. We’d love to hear how teams are adopting MCPs and the impact they’re having on real workflows. At Somnio, we’re ready to help you explore how these integrations can take your workflow to the next level.