Mu는 뉴스, 웹 검색, 메일, 날씨 등 인터넷 환경에 필요한 67개의 실제 도구를 단일 MCP 엔드포인트로 제공하는 오픈소스 프로젝트입니다. 단순히 외부 API를 호출하는 얇은 래퍼(Wrapper)가 아니라 자체적으로 메일 서버, 검색 인덱서, 저장소 등을 구동하여 에이전트에게 진짜 기능을 부여하는 것이 특징입니다. 오픈소스로 공개되어 호스팅 버전을 쓰거나 직접 자체 서버에 구축할 수 있어 개발자 입장에서 매우 유용합니다.
번역된 본문
Mu: 에이전트를 위한 도구
개요
Mu는 에이전트에게 일상적인 인터넷 환경을 도구로 제공합니다. 뉴스, 웹 검색, 메일, 시장 정보, 날씨, 비디오, 장소, 이미지, 파일, 캘린더, 연락처 등 총 67개의 도구가 하나의 MCP 엔드포인트 뒤에 놓여 있습니다. 각 기능마다 서버를 설정할 필요 없이 한 번만 연결하면 에이전트가 모든 도구를 사용할 수 있습니다.
래퍼(Wrapper)가 아닌 진짜 도구.
에이전트에게 도구를 제공한다고 하는 대부분의 서비스는 다른 사람의 API 위에 얹어진 얇은 층에 불과합니다. 반면 Mu는 자체 메일 서버(DKIM이 적용된 SMTP), 피드 수집기, 검색 인덱스, 앱 샌드박스, 그리고 사용자에게 제공되는 지갑(Wallet)을 직접 구동합니다. mail_inbox는 실제 받은 편지함을 읽고, db_create는 실제 스토리지에 데이터를 기록합니다. 이 도구들은 단순히 타사 제품의 카탈로그가 아니라, 인스턴스 자체의 기능을 외부로 노출한 것입니다. 운영자 역시 사람이기 때문에 동일한 도구를 사용하는 웹 앱도 제공됩니다. micro.mu에서 호스팅되는 버전을 사용하거나, 단일 Go 바이너리를 통해 직접 셀프 호스팅(Self-host)할 수도 있습니다. 양쪽 모두 동일한 제품이며, 오픈소스(AGPL-3.0)로 공개되었습니다.
위의 설정이 전부입니다. 붙여 넣을 API 키가 없기 때문에 설정에 키가 포함되어 있지 않습니다. 첫 번째 호출 시 인스턴스의 인증 서버를 가리키는 401 응답을 받게 되며, 클라이언트가 로그인 과정을 안유하고 토큰을 직접 보관합니다. 이것은 MCP 인증 스펙에 명시된 방식이며 Claude Desktop과 Cursor 모두 이를 지원합니다. 만약 사용하는 클라이언트가 이를 지원하지 않는다면, /token 경로에서 개인 액세스 토큰(PAT)을 생성하여 Authorization: Bearer로 전송하면 됩니다.
curl -X POST https://micro.mu/mcp -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
인스턴스 자체의 콘텐츠를 읽어오는 기능은 무료로 포함되어 있습니다. 모델 호출이나 타사 유료 서비스를 이용하여 비용이 발생하는 호출의 경우, 사용자의 잔액(크레딧)에서 차감됩니다. 어떤 도구들이 있는지 micro.mu/tools에서 확인할 수 있습니다. 모든 도구는 서비스별로 그룹화되어 있으며 각 호출에 필요한 비용도 명시되어 있습니다. 자세한 프로토콜은 MCP 문서를 참조하세요.
도구 목록
웹(Web): web_search · web_fetch — 웹 검색, 페이지를 깔끔한 텍스트로 읽기
뉴스(News): news_list · news_read · news_search — RSS 피드 수집 및 전체 기사 제공
시장(Markets): markets_list — 암호화폐, 선물, 상품, 환율
날씨(Weather): weather_forecast — 기상 조건, 예보, 꽃가루 정보
장소(Places): places_search · places_nearby · places_eta — 관심 지점(POI), 지오코딩, 이동 시간
비디오(Video): video_list · video_search — 큐레이션된 채널 (광고 및 추천 없음)
메일(Mail): mail_inbox · mail_send · mail_address — DKIM이 적용된 실제 SMTP 서버 및 에이전트별 주소 제공
스토리지(Storage): db_create · db_get · db_list · db_update · db_delete — 호출자별 레코드 관리
파일(Files): files_put · files_get · files_list · files_share — 파일 보관 및 URL 생성
캘린더(Calendar): events_create · events_free · events_list — 일정 추가 및 비어 있는 시간 조회
연락처(Contacts): contacts_find · contacts_add · contacts_list — 이름으로 주소 검색
자체 검색(Search): index_search — 이 인스턴스가 보유한 모든 정보 검색
앱(Apps): apps_build · apps_run · apps_edit — 소규모 웹 도구 빌드 및 실행
신앙(Faith): islam_today · islam_prayer · islam_qibla · quran · hadith
자금(Money): wallet_balance — 크레딧 확인 및 USDC 충전 주소 제공
에이전트(Agent): agent · chat — 전체 데이터에 대해 질문하고 에이전트가 답변을 조합
모든 도구는 Mu CLI의 하위 명령(subcommand)이기도 합니다. 계정 범위가 지정된 도구들(메일, 스토리지, 인덱스, 이미지, 이벤트, 파일, 연락처)은 로그인한 호출자가 필요합니다. 특히 메일 전송(mail_send)은 신원을 확인할 수 없는 호출자가 도메인의 평판을 소진하지 못하도록 항상 로그인을 요구합니다.
왜 이 도구들이 '진짜'인가?
위에 나열된 각 영역은 서비스입니다. 즉, 타입이 지정된 핸들러가 있는 Go 패키지이며, Go Micro 레지스트리 뒤의 프로세스 내에 등록됩니다. 외부 인프라 없이 단일 바이너리로 동작합니다. 레지스트리는 정보의 단일 출처입니다. 서비스가 한 번 선언되면 모든 표면(인터페이스)은 해당 선언에서 파생됩니다.
var Spec = service.Spec{
Name: "web",
Handler: new(Server),
Description: "The open web: search it, read a page from it",
Page: "/search",
Endpoints: map[string]service.Endpoint{
"Search": {
Doc: "Search the web for current information",
Cost: wallet.OpWebSearch,
},
"Fetch": {
Doc: "Fetch a web page and r...
mu Tools for agents Overview Mu gives an agent the everyday internet as tools: news, web search, mail, markets, weather, video, places, images, files, calendar, contacts. 67 of them, behind one MCP endpoint. Connect once and your agent has all of them, instead of wiring up a server for each. Real tools, not wrappers. Most things offering an agent tools are a thin layer over somebody else's API. Mu runs the mail server (SMTP with DKIM), the feed aggregator, the search index, the app sandbox and the wallet it hands you. mail_inbox reads a real inbox. db_create writes to real storage. The tools aren't a catalogue of other people's products — they're this instance's own capabilities, exposed. There is also a web app on the same tools, because the operator is a person too. Use it hosted at micro.mu , or self-host the single Go binary — same product either way. Open source, AGPL-3.0. Point an agent at it { "mcpServers" : { "mu" : { "url" : " https://micro.mu/mcp " } } } That's the whole setup. There is no key in that config because there is nothing to paste: the first call gets a 401 pointing at the instance's authorization server, your client walks you through sign-in and keeps the token itself. This is the MCP authorization spec — Claude Desktop and Cursor both speak it. For a client that doesn't, create a Personal Access Token at /token and send it as Authorization: Bearer . curl -X POST https://micro.mu/mcp -H ' Content-Type: application/json ' \ -d ' {"jsonrpc":"2.0","id":1,"method":"tools/list"} ' Reading this instance's own content is included. Calls that cost us money to run — a model call, a paid third party — draw credits from your balance. Browse what's there: micro.mu/tools — every tool, grouped by service, with what each call costs. MCP docs for the protocol detail. The tools Area Tools Web web_search · web_fetch — search the web, read a page as clean text News news_list · news_read · news_search — RSS aggregation, full articles Markets markets_list — crypto, futures, commodities, currencies Weather weather_forecast — conditions, forecast, pollen Places places_search · places_nearby · places_eta — points of interest, geocoding, travel time Video video_list · video_search — curated channels, no ads or recommendations Mail mail_inbox · mail_send · mail_address — a real SMTP server with DKIM, and an address per agent Storage db_create · db_get · db_list · db_update · db_delete — per-caller records Files files_put · files_get · files_list · files_share — keep a file, get a URL Calendar events_create · events_free · events_list — schedule, and find when you are free Contacts contacts_find · contacts_add · contacts_list — turn a name into an address Search your own index_search — everything this instance holds for you Images images_generate · images_search Writing blog_* · social_* · stream_* — publish, read, discuss Apps apps_build · apps_run · apps_edit — build and run small web tools Faith islam_today · islam_prayer · islam_qibla · quran · hadith Money wallet_balance — credits, and where to send USDC to top up Agent agent · chat — ask the whole thing a question and let it compose Every tool is also a mu CLI subcommand. Account-scoped tools (mail, storage, index, images, events, files, contacts) need a signed-in caller; mail_send always does, so an unaccountable caller can't spend a domain's reputation. Why the tools are real Each area above is a service — a Go package with typed handlers, registered in-process behind a Go Micro registry. One binary, no external infrastructure. The registry is the single source of truth: a service declares itself once and every surface derives from that declaration. var Spec = service. Spec { Name : "web" , Handler : new ( Server ), Description : "The open web: search it, read a page from it" , Page : "/search" , Endpoints : map [ string ]service. Endpoint { "Search" : { Doc : "Search the web for current information" , Cost : wallet . OpWebSearch }, "Fetch" : { Doc : "Fetch a web page and return readable content" , Cost : wallet . OpWebFetch }, }, } Register that and it becomes available, in the same moment and with no extra wiring, to: agents , over MCP at /mcp — for Claude Desktop, Cursor, or your own; the built-in agent , as a tool it can call; custom agents , in the tool picker at /agent/new ; the CLI , where each tool is a subcommand; apps , through mu.service(name, method, args) in the SDK. So extending Mu is adding an element, not wiring N integrations. // inside an app — any registered service, no SDK change needed const { times } = await mu . service ( 'islam' , 'prayer' , { lat , lon , tz } ) const { summary } = await mu . service ( 'weather' , 'forecast' , { lat , lon } ) Identity is bound server-side from the call context — a caller never names whose data it wants, and there is no account field in any request to forge. The app The same tools, for a person. Cards render each service at a glance (headlines, prices, weather, unread mail) and the agent sits inline to act on what you're looking at. Logged-out visitors get a public version with live data. An LLM — Claude, Atlas Cloud (DeepSeek), or a local Ollama / OpenAI-compatible endpoint — calls the services as tools, composes answers, and keeps per-user memory across sessions. Sign in with a username and password, a passkey (WebAuthn), or Google . For the CLI, generate a Personal Access Token at /token . CLI Every tool is a mu subcommand. The same binary runs the server ( mu --serve ) and the CLI. mu news_list # latest headlines mu news_search " ai safety " # search news mu web_search " claude code " # search the web mu agent " what is the btc price? " # run the full agent mu weather_forecast --lat 51.5 --lon -0.12 mu wallet # your balance mu help # full tool list The CLI is registry-driven — a tool added to the server automatically becomes a CLI command. mu login # opens /token in your browser, paste the PAT back mu config set token xxx # or set it directly export MU_TOKEN=xxx # or use the environment See CLI docs . Discord & Telegram Talk to the agent from Discord or Telegram — questions, markets, news, all from chat. Join the Discord Discord: /agent , /news , /markets , /weather , /mail , /social , /blog , /video , /search , /apps , /balance , /usage . Telegram: /agent , /ask , /news , /markets , /weather , /usage . Setup for both is in Installation . Self-hosting Run your own instance and you are the operator: the tools are yours, and anyone paying to call them pays you. curl -fsSL https://raw.githubusercontent.com/micro/mu/main/install.sh | sh # Docker git clone https://github.com/micro/mu && cd mu docker compose up # From source git clone https://github.com/micro/mu cd mu && go install mu --serve First-run setup Open http://localhost:8080 and Mu walks you through a one-time setup: create your admin account and pick an AI provider (Claude, Atlas Cloud, or a local Ollama / OpenAI-compatible endpoint). That's enough to have a working agent. Prefer the terminal? Configure the provider headless, then start the server: mu setup # pick a provider, paste a key mu --serve # first account you create becomes admin Or set everything by hand: export ADMIN=you@example.com # who's admin (else: first account) export ATLAS_API_KEY=xxx # or ANTHROPIC_API_KEY, or OPENAI_BASE_URL mu --serve Once you're admin, every other key (YouTube, Brave search, weather, mail/DKIM, Google sign-in…) is configurable from /admin/env in the browser. See Installation guide . Configuration Customise feeds, prompts and cards by editing JSON files: service/news/feeds.json — RSS news feeds service/chat/prompts.json — chat topics home/cards.json — home screen cards service/video/channels.json — YouTube channels service/places/locations.json — saved locations See Environment Variables for all options. Documentation Full docs in the docs folder. Start with MCP for agents, Architecture for the code. The live tool catalogue is at /tools . License AGPL-3.0 — use, modify, distribute. If you run