[{"data":1,"prerenderedAt":379},["ShallowReactive",2],{"docs-page-\u002Fdocs\u002Fmcp":3,"docs-surround-\u002Fdocs\u002Fmcp":372},{"id":4,"title":5,"body":6,"description":364,"extension":365,"meta":366,"navigation":367,"path":368,"seo":369,"stem":370,"__hash__":371},"docs\u002Fdocs\u002F5.mcp.md","AI Agents",{"type":7,"value":8,"toc":358},"minimark",[9,13,35,38,43,61,67,104,122,189,198,205,209,269,288,291,303,307,317,320,326,333,337,354],[10,11,5],"h1",{"id":12},"ai-agents",[14,15,16,17,21,22,29,30,34],"p",{},"Your agent can read your production logs, and Lumber still can't. ",[18,19,20],"code",{},"lumber mcp"," serves your logs to AI agents over the ",[23,24,28],"a",{"href":25,"rel":26},"https:\u002F\u002Fmodelcontextprotocol.io",[27],"nofollow","Model Context Protocol"," (MCP), the standard way agents such as Claude Code and Claude Desktop use tools. The logs are decrypted on your Mac by the ",[23,31,33],{"href":32},"\u002Fdocs\u002Fcli","lumber command",", with your own account key, and Lumber's servers still hold only ciphertext.",[14,36,37],{},"The tools only read: nothing an agent does through them changes anything in Lumber.",[39,40,42],"h2",{"id":41},"setup","Setup",[44,45,46,58],"ol",{},[47,48,49,50,53,54,57],"li",{},"Install ",[18,51,52],{},"lumber",", then sign in and link your Mac (see ",[23,55,56],{"href":32},"Command Line",").",[47,59,60],{},"Add it to your agent.",[14,62,63],{},[64,65,66],"strong",{},"Claude Code:",[68,69,74],"pre",{"className":70,"code":71,"language":72,"meta":73,"style":73},"language-bash shiki shiki-themes github-dark","claude mcp add lumber -- lumber mcp\n","bash","",[18,75,76],{"__ignoreMap":73},[77,78,81,85,89,92,95,99,101],"span",{"class":79,"line":80},"line",1,[77,82,84],{"class":83},"svObZ","claude",[77,86,88],{"class":87},"sU2Wk"," mcp",[77,90,91],{"class":87}," add",[77,93,94],{"class":87}," lumber",[77,96,98],{"class":97},"sDLfK"," --",[77,100,94],{"class":87},[77,102,103],{"class":87}," mcp\n",[14,105,106,109,110,113,114,117,118,121],{},[64,107,108],{},"Claude Desktop:"," add it to ",[18,111,112],{},"claude_desktop_config.json",", with the full path that ",[18,115,116],{},"which lumber"," prints, since the app doesn't read your shell's ",[18,119,120],{},"PATH",":",[68,123,127],{"className":124,"code":125,"language":126,"meta":73,"style":73},"language-json shiki shiki-themes github-dark","{\n  \"mcpServers\": {\n    \"lumber\": { \"command\": \"\u002Fopt\u002Fhomebrew\u002Fbin\u002Flumber\", \"args\": [\"mcp\"] }\n  }\n}\n","json",[18,128,129,135,144,177,183],{"__ignoreMap":73},[77,130,131],{"class":79,"line":80},[77,132,134],{"class":133},"s95oV","{\n",[77,136,138,141],{"class":79,"line":137},2,[77,139,140],{"class":97},"  \"mcpServers\"",[77,142,143],{"class":133},": {\n",[77,145,147,150,153,156,159,162,165,168,171,174],{"class":79,"line":146},3,[77,148,149],{"class":97},"    \"lumber\"",[77,151,152],{"class":133},": { ",[77,154,155],{"class":97},"\"command\"",[77,157,158],{"class":133},": ",[77,160,161],{"class":87},"\"\u002Fopt\u002Fhomebrew\u002Fbin\u002Flumber\"",[77,163,164],{"class":133},", ",[77,166,167],{"class":97},"\"args\"",[77,169,170],{"class":133},": [",[77,172,173],{"class":87},"\"mcp\"",[77,175,176],{"class":133},"] }\n",[77,178,180],{"class":79,"line":179},4,[77,181,182],{"class":133},"  }\n",[77,184,186],{"class":79,"line":185},5,[77,187,188],{"class":133},"}\n",[14,190,191,194,195,197],{},[64,192,193],{},"Other MCP clients:"," run ",[18,196,20],{}," as a stdio server.",[14,199,200,201,204],{},"The server uses the session ",[18,202,203],{},"lumber login"," saved, reading it from the Keychain on each call, so signing in again doesn't need a restart.",[39,206,208],{"id":207},"tools","Tools",[210,211,212,225],"table",{},[213,214,215],"thead",{},[216,217,218,222],"tr",{},[219,220,221],"th",{},"Tool",[219,223,224],{},"What it does",[226,227,228,239,249,259],"tbody",{},[216,229,230,236],{},[231,232,233],"td",{},[18,234,235],{},"list_apps",[231,237,238],{},"Your apps, whether your Mac can read each one, how many days of logs its plan keeps, and whether it has reached its monthly log limit",[216,240,241,246],{},[231,242,243],{},[18,244,245],{},"search_logs",[231,247,248],{},"The newest logs matching apps, a level, a time range and text, up to 500 at a time",[216,250,251,256],{},[231,252,253],{},[18,254,255],{},"wait_for_logs",[231,257,258],{},"Waits for new logs (errors and fatals, unless told otherwise) and returns them grouped by message, each group with its count and its latest log in full",[216,260,261,266],{},[231,262,263],{},[18,264,265],{},"list_notes",[231,267,268],{},"The notes people wrote about an app's logs, with who wrote them",[14,270,271,272,158,276,279,280,283,284,287],{},"Levels and times work as on the ",[23,273,275],{"href":274},"\u002Fdocs\u002Fcli#finding-logs","command line",[18,277,278],{},"warn"," means warn and above, and a time is an age like ",[18,281,282],{},"2h",", a day like ",[18,285,286],{},"2026-10-29",", or an ISO time.",[14,289,290],{},"Things to ask:",[292,293,294,297,300],"ul",{},[47,295,296],{},"\"What errors did Billing log in the last hour?\"",[47,298,299],{},"\"Find the logs for request req-42 and tell me what happened.\"",[47,301,302],{},"\"Has anyone left a note about this error?\"",[39,304,306],{"id":305},"watching-for-errors","Watching for errors",[14,308,309,310,312,313,316],{},"Nothing watches unless you ask it to. ",[18,311,255],{}," returns as soon as new logs arrive, or empty after a timeout, with a ",[18,314,315],{},"next_after"," value; passing it back on the next call carries on exactly where the last one stopped, so an agent can watch in a loop without missing or repeating a log. A burst of the same error comes back as one group with a count, so one bug reads as one problem rather than a hundred.",[14,318,319],{},"In Claude Code, for example:",[321,322,323],"blockquote",{},[14,324,325],{},"Watch Billing for errors with wait_for_logs. When one comes in, find the cause in this repo and fix it, leaving the change for me to review.",[14,327,328,329,332],{},"An agent can follow the command line instead: ",[18,330,331],{},"lumber tail Billing -l error --json -q"," prints one line per error.",[39,334,336],{"id":335},"keep-in-mind","Keep in mind",[292,338,339,345,351],{},[47,340,341,344],{},[64,342,343],{},"Logs are untrusted input."," A log's message, context and metadata are written by your app, and through it by the people using it: a form field, a URL or a crafted request can end up in a log. Every tool tells the agent to treat log text as data, never as instructions, but an agent that can change your code is still reading text anyone could have written. Review its changes rather than letting it deploy them.",[47,346,347,350],{},[64,348,349],{},"Your agent's model sees what it reads."," The logs are decrypted on your Mac and handed to your agent, so the service that runs its model receives the logs the agent reads, under that service's own terms. Lumber's servers still never see them.",[47,352,353],{},"Like the command line, it runs on macOS for now.",[355,356,357],"style",{},"html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}",{"title":73,"searchDepth":137,"depth":137,"links":359},[360,361,362,363],{"id":41,"depth":137,"text":42},{"id":207,"depth":137,"text":208},{"id":305,"depth":137,"text":306},{"id":335,"depth":137,"text":336},"Let Claude Code, Claude Desktop and other AI agents read and watch your Lumber logs over MCP, decrypted on your Mac.","md",{},true,"\u002Fdocs\u002Fmcp",{"title":5,"description":364},"docs\u002F5.mcp","BGDuuVHdKenxeNdcZeIbpE7Ygi5QPBXyB0G2s9sDwwQ",[373,375],{"title":56,"path":32,"stem":374,"children":-1},"docs\u002F4.cli",{"title":376,"path":377,"stem":378,"children":-1},"API Keys","\u002Fdocs\u002Fapi-keys","docs\u002F6.api-keys",1794245210719]