# Launching MCP Servers on Fly.io

DevFeed: [Launching MCP Servers on Fly.io](<https://devfeed.tech/articles/launching-mcp-servers-on-fly-io-1709.md>)

Original publisher: [Read original article](<https://fly.io/blog/mcp-launch/>)

Published: 2025-05-19T00:00:00Z

Content type: opinion

Language: en

Sources: [The Fly Blog](<https://devfeed.tech/sources/the-fly-blog.md>)

Topics: [Model Context Protocol](<https://devfeed.tech/topics/model-context-protocol.md>), [MCP Server](<https://devfeed.tech/topics/mcp-server.md>), [fly.io](<https://devfeed.tech/topics/fly-io.md>), [OAuth](<https://devfeed.tech/topics/oauth.md>), [Security](<https://devfeed.tech/topics/security.md>), [Slack](<https://devfeed.tech/topics/slack.md>)

Tags: [cdn](<https://devfeed.tech/tags/cdn.md>), [close-to-users](<https://devfeed.tech/tags/close-to-users.md>), [deploy-app-servers](<https://devfeed.tech/tags/deploy-app-servers.md>), [docker](<https://devfeed.tech/tags/docker.md>), [elixir](<https://devfeed.tech/tags/elixir.md>), [fly](<https://devfeed.tech/tags/fly.md>), [fly-io](<https://devfeed.tech/tags/fly-io.md>), [heroku-alternative](<https://devfeed.tech/tags/heroku-alternative.md>), [heroku-competitor](<https://devfeed.tech/tags/heroku-competitor.md>), [hosting](<https://devfeed.tech/tags/hosting.md>), [i](<https://devfeed.tech/tags/i.md>), [json](<https://devfeed.tech/tags/json.md>), [linux](<https://devfeed.tech/tags/linux.md>), [macos](<https://devfeed.tech/tags/macos.md>), [mcp](<https://devfeed.tech/tags/mcp.md>), [mcp-server](<https://devfeed.tech/tags/mcp-server.md>), [model-context-protocol](<https://devfeed.tech/tags/model-context-protocol.md>), [networking](<https://devfeed.tech/tags/networking.md>), [oauth](<https://devfeed.tech/tags/oauth.md>), [postgresql-clusters](<https://devfeed.tech/tags/postgresql-clusters.md>), [servers](<https://devfeed.tech/tags/servers.md>), [slack](<https://devfeed.tech/tags/slack.md>), [windows](<https://devfeed.tech/tags/windows.md>)

## AI overview

This opinionated blog post introduces Fly.io's approach to launching MCP Servers. It explains the trade-offs between local process-based servers and remote HTTP servers, including configuration complexity and OAuth 2.1 security requirements, then demonstrates a Slack MCP Server for interacting with Slack workspaces.

## Source excerpt

This is a blog post. Part showing off. Part opinion. Plan accordingly. The Model Context Protocol is days away from turning six months old. You read that right, six months old. MCP Servers have both taken the world by storm, and still trying to figure out what they want to be when they grow up. There is no doubt that MCP servers are useful. But their appeal goes beyond that. They are also simple and universal. What's not to like? Well, for starters, there's basically two types of MCP servers. One small and nimble that runs as a process on your machine. And one that is a HTTP server that runs presumably elsewhere and is standardizing on OAuth 2.1. And there is a third type, but it is deprecated. Next there is the configuration. Asking users to manually edit JSON seems so early 21th century. With Claude, this goes into ~/Library/Application Support/Claude/claude_desktop_config.json, and is found under a MCPServer key. With Zed, this file is in ~/.config/zed/settings.json and is found under a context_servers key. And some tools put these files in a different place depending on whether you are running on MacOS, Linux, or Windows. Finally, there is security. An MCP server running on your machine literally has access to everything you do. Running remote solves this problem, but did I mention OAuth 2.1? Not exactly something one sets up for casual use. None of these issues are fatal - something that is obvious by the fact that MCP servers are quite popular. But can we do better? I think so. Demo time. Let's try out the Slack MCP Server: MCP Server for the Slack API, enabling Claude to interact with Slack workspaces. That certainly sounds like a good test case. There is a small amount of setup you need to do, and when you are done you end up with a Bot User OAuth Token staring with xoxb- and a Team ID starting with a T. You would run it using the following: Wrap text Copy to clipboard npx -y @modelcontextprotocol/server-slack But instead, you convert that command to JSON an