[{"data":1,"prerenderedAt":1404},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fmcp":3,"docs-nav":1299},{"id":4,"title":5,"body":6,"description":1291,"extension":478,"meta":1292,"navigation":1293,"order":1294,"path":1295,"seo":1296,"stem":1297,"__hash__":1298},"docs\u002Fdocs\u002F8.mcp.md","MCP server",{"type":7,"value":8,"toc":1275},"minimark",[9,36,60,72,77,82,119,137,141,152,219,223,229,273,290,305,309,335,681,733,736,787,890,899,903,906,954,970,974,986,1051,1055,1073,1076,1080,1125,1129,1159,1163,1271],[10,11,12,16,17,24,25,27,28,31,32,35],"p",{},[13,14,15],"code",{},"jawb mcp"," serves jawb's tools to any host that speaks the\n",[18,19,23],"a",{"href":20,"rel":21},"https:\u002F\u002Fmodelcontextprotocol.io",[22],"nofollow","Model Context Protocol",", such as Claude\nCode, Cursor or Claude Desktop. The host starts ",[13,26,15],{}," itself and talks\nto it over stdin and stdout. Each tool call becomes an ordinary call to\n",[13,29,30],{},"jawbd","'s ",[13,33,34],{},"\u002Fv1"," API, so the daemon applies the same policy, egress rules,\nconfirmations and trace as it does for the CLI. There is no second way in.",[10,37,38,40,41,44,45,47,48,51,52,54,55,59],{},[13,39,15],{}," is part of the ",[13,42,43],{},"jawb"," CLI. If ",[13,46,43],{}," is on your ",[13,49,50],{},"PATH",", you have\nit. It starts ",[13,53,30],{}," on first use like any other command (see\n",[18,56,58],{"href":57},"\u002Fdocs\u002Fgetting-started\u002Frunning-the-daemon","Running the daemon",").",[61,62,63],"blockquote",{},[10,64,65,66,68,69,71],{},"Not in a release yet: ",[13,67,15],{}," ships in the release after jawb 0.1.1.\njawb 0.1.1 and earlier have no ",[13,70,15],{},".",[73,74,76],"h2",{"id":75},"adding-jawb-to-a-host","Adding jawb to a host",[78,79,81],"h3",{"id":80},"claude-code","Claude Code",[83,84,89],"pre",{"className":85,"code":86,"language":87,"meta":88,"style":88},"language-bash shiki shiki-themes github-light github-dark","claude mcp add jawb -- jawb mcp\n","bash","",[13,90,91],{"__ignoreMap":88},[92,93,96,100,104,107,110,114,116],"span",{"class":94,"line":95},"line",1,[92,97,99],{"class":98},"sScJk","claude",[92,101,103],{"class":102},"sZZnC"," mcp",[92,105,106],{"class":102}," add",[92,108,109],{"class":102}," jawb",[92,111,113],{"class":112},"sj4cs"," --",[92,115,109],{"class":102},[92,117,118],{"class":102}," mcp\n",[10,120,121,122,125,126,129,130,133,134,136],{},"Add ",[13,123,124],{},"--scope project"," to write it to the project's ",[13,127,128],{},".mcp.json"," instead\nof your user settings. ",[13,131,132],{},"claude mcp list"," should show ",[13,135,43],{}," as\nconnected.",[78,138,140],{"id":139},"cursor","Cursor",[10,142,143,144,147,148,151],{},"In ",[13,145,146],{},"~\u002F.cursor\u002Fmcp.json"," (all projects) or ",[13,149,150],{},".cursor\u002Fmcp.json"," (one\nproject):",[83,153,157],{"className":154,"code":155,"language":156,"meta":88,"style":88},"language-json shiki shiki-themes github-light github-dark","{\n  \"mcpServers\": {\n    \"jawb\": { \"command\": \"jawb\", \"args\": [\"mcp\"] }\n  }\n}\n","json",[13,158,159,165,174,207,213],{"__ignoreMap":88},[92,160,161],{"class":94,"line":95},[92,162,164],{"class":163},"sVt8B","{\n",[92,166,168,171],{"class":94,"line":167},2,[92,169,170],{"class":112},"  \"mcpServers\"",[92,172,173],{"class":163},": {\n",[92,175,177,180,183,186,189,192,195,198,201,204],{"class":94,"line":176},3,[92,178,179],{"class":112},"    \"jawb\"",[92,181,182],{"class":163},": { ",[92,184,185],{"class":112},"\"command\"",[92,187,188],{"class":163},": ",[92,190,191],{"class":102},"\"jawb\"",[92,193,194],{"class":163},", ",[92,196,197],{"class":112},"\"args\"",[92,199,200],{"class":163},": [",[92,202,203],{"class":102},"\"mcp\"",[92,205,206],{"class":163},"] }\n",[92,208,210],{"class":94,"line":209},4,[92,211,212],{"class":163},"  }\n",[92,214,216],{"class":94,"line":215},5,[92,217,218],{"class":163},"}\n",[78,220,222],{"id":221},"claude-desktop","Claude Desktop",[10,224,143,225,228],{},[13,226,227],{},"claude_desktop_config.json"," (Settings, Developer, Edit Config):",[83,230,231],{"className":154,"code":155,"language":156,"meta":88,"style":88},[13,232,233,237,243,265,269],{"__ignoreMap":88},[92,234,235],{"class":94,"line":95},[92,236,164],{"class":163},[92,238,239,241],{"class":94,"line":167},[92,240,170],{"class":112},[92,242,173],{"class":163},[92,244,245,247,249,251,253,255,257,259,261,263],{"class":94,"line":176},[92,246,179],{"class":112},[92,248,182],{"class":163},[92,250,185],{"class":112},[92,252,188],{"class":163},[92,254,191],{"class":102},[92,256,194],{"class":163},[92,258,197],{"class":112},[92,260,200],{"class":163},[92,262,203],{"class":102},[92,264,206],{"class":163},[92,266,267],{"class":94,"line":209},[92,268,212],{"class":163},[92,270,271],{"class":94,"line":215},[92,272,218],{"class":163},[10,274,275,276,278,279,281,282,285,286,289],{},"Claude Desktop does not always inherit your shell's ",[13,277,50],{},". If it cannot\nstart ",[13,280,43],{},", give the full path: ",[13,283,284],{},"~\u002F.jawb\u002Fbin\u002Fjawb"," on macOS and Linux,\nor ",[13,287,288],{},"%LOCALAPPDATA%\\Programs\\jawb\\bin\\jawb.exe"," on Windows.",[10,291,292,293,296,297,300,301,304],{},"The usual global flags and variables work. For example, ",[13,294,295],{},"\"args\": [\"mcp\", \"--daemon\", \"http:\u002F\u002F127.0.0.1:4181\"]"," targets a daemon on another port,\nand ",[13,298,299],{},"JAWB_DATA_DIR"," in the host's ",[13,302,303],{},"env"," block picks a different data\ndirectory.",[73,306,308],{"id":307},"tools","Tools",[10,310,311,312,194,315,318,319,322,323,326,327,330,331,334],{},"Every tool's result carries the daemon's JSON envelope (",[13,313,314],{},"v",[13,316,317],{},"ok",",\n",[13,320,321],{},"result"," or ",[13,324,325],{},"error",", and ",[13,328,329],{},"warnings",") as ",[13,332,333],{},"structuredContent",", plus a short\ntext summary for the model.",[336,337,338,354],"table",{},[339,340,341],"thead",{},[342,343,344,348,351],"tr",{},[345,346,347],"th",{},"Tool",[345,349,350],{},"What it does",[345,352,353],{},"CLI equivalent",[355,356,357,373,391,421,436,451,466,489,516,556,571,594,609,628,648,666],"tbody",{},[342,358,359,365,368],{},[360,361,362],"td",{},[13,363,364],{},"jawb_status",[360,366,367],{},"Daemon version, API level, profile, tab count, bridge and approval assurance",[360,369,370],{},[13,371,372],{},"jawb status",[342,374,375,380,386],{},[360,376,377],{},[13,378,379],{},"jawb_open",[360,381,382,383],{},"Open a URL in a new tab, or navigate ",[13,384,385],{},"tab",[360,387,388],{},[13,389,390],{},"jawb open",[342,392,393,398,412],{},[360,394,395],{},[13,396,397],{},"jawb_history",[360,399,400,188,403,194,406,322,409],{},[13,401,402],{},"op",[13,404,405],{},"back",[13,407,408],{},"forward",[13,410,411],{},"reload",[360,413,414,194,417,194,419],{},[13,415,416],{},"jawb back",[13,418,408],{},[13,420,411],{},[342,422,423,428,431],{},[360,424,425],{},[13,426,427],{},"jawb_tabs",[360,429,430],{},"List the open tabs",[360,432,433],{},[13,434,435],{},"jawb tabs",[342,437,438,443,446],{},[360,439,440],{},[13,441,442],{},"jawb_close",[360,444,445],{},"Close a tab",[360,447,448],{},[13,449,450],{},"jawb close",[342,452,453,458,461],{},[360,454,455],{},[13,456,457],{},"jawb_observe",[360,459,460],{},"The page's elements, with the ids the Act tools take",[360,462,463],{},[13,464,465],{},"jawb observe",[342,467,468,473,484],{},[360,469,470],{},[13,471,472],{},"jawb_read",[360,474,475,476,194,479,322,482],{},"The page's content as ",[13,477,478],{},"md",[13,480,481],{},"text",[13,483,156],{},[360,485,486],{},[13,487,488],{},"jawb read",[342,490,491,496,511],{},[360,492,493],{},[13,494,495],{},"jawb_wait",[360,497,498,499,194,502,194,505,322,508],{},"Wait for ",[13,500,501],{},"text:",[13,503,504],{},"element:",[13,506,507],{},"url:",[13,509,510],{},"idle",[360,512,513],{},[13,514,515],{},"jawb wait",[342,517,518,547,550],{},[360,519,520,194,523,194,526,194,529,194,532,194,535,194,538,194,541,194,544],{},[13,521,522],{},"jawb_click",[13,524,525],{},"jawb_fill",[13,527,528],{},"jawb_type",[13,530,531],{},"jawb_select",[13,533,534],{},"jawb_check",[13,536,537],{},"jawb_press",[13,539,540],{},"jawb_hover",[13,542,543],{},"jawb_scroll",[13,545,546],{},"jawb_submit",[360,548,549],{},"Act on the page",[360,551,552],{},[18,553,555],{"href":554},"\u002Fdocs\u002Fcli\u002Fact","Act commands",[342,557,558,563,566],{},[360,559,560],{},[13,561,562],{},"jawb_screenshot",[360,564,565],{},"A PNG, returned as image content and never written to disk",[360,567,568],{},[13,569,570],{},"jawb screenshot",[342,572,573,578,589],{},[360,574,575],{},[13,576,577],{},"jawb_viewport",[360,579,580,194,583,322,586],{},[13,581,582],{},"mobile",[13,584,585],{},"desktop",[13,587,588],{},"WxH",[360,590,591],{},[13,592,593],{},"jawb viewport",[342,595,596,601,604],{},[360,597,598],{},[13,599,600],{},"jawb_tools",[360,602,603],{},"Tools the page declares (WebMCP) and the installed extension tools, with their source. Page tools are listed only",[360,605,606],{},[13,607,608],{},"jawb tools",[342,610,611,616,623],{},[360,612,613],{},[13,614,615],{},"jawb_tool_call",[360,617,618,619,622],{},"Call a tool of an installed ",[13,620,621],{},"api-tools"," extension by its full name, through the daemon's policy",[360,624,625],{},[13,626,627],{},"POST \u002Fv1\u002Ftools\u002Fcall",[342,629,630,635,643],{},[360,631,632],{},[13,633,634],{},"ext_\u003Cname>",[360,636,637,638,642],{},"One tool per installed extension tool (see ",[18,639,641],{"href":640},"#extension-tools","Extension tools",")",[360,644,645],{},[13,646,647],{},"jawb tool call",[342,649,650,655,661],{},[360,651,652],{},[13,653,654],{},"jawb_trace",[360,656,657,658,660],{},"The last steps ",[13,659,30],{}," recorded",[360,662,663],{},[13,664,665],{},"jawb trace",[342,667,668,673,676],{},[360,669,670],{},[13,671,672],{},"jawb_confirmation",[360,674,675],{},"Read a held action, or wait for a human's answer to it. It cannot approve",[360,677,678],{},[13,679,680],{},"--await-confirm",[10,682,683,684,687,688,691,692,694,695,698,699,194,702,322,705,708,709,712,713,715,716,719,720,723,724,727,728,194,730,732],{},"Act tools take a ",[13,685,686],{},"target",": either ",[13,689,690],{},"{\"id\": 12}"," (an id from ",[13,693,457],{},",\nwith ",[13,696,697],{},"id_revision"," if you want it checked) or exactly one of\n",[13,700,701],{},"{\"text\": ...}",[13,703,704],{},"{\"role\": \"button:Pay\"}",[13,706,707],{},"{\"css\": ...}",", with ",[13,710,711],{},"nth","\nto pick among several matches. ",[13,714,525],{}," takes either ",[13,717,718],{},"value"," or\n",[13,721,722],{},"secret_ref"," (",[13,725,726],{},"vault:\u003Cname>","). With ",[13,729,722],{},[13,731,30],{}," resolves the\nsecret itself, so its value never passes through MCP.",[73,734,641],{"id":735},"extension-tools",[10,737,738,739,743,744,747,748,750,751,754,755,758,759,762,763,766,767,770,771,194,774,194,777,194,780,322,783,786],{},"Each tool of an installed, enabled extension (see\n",[18,740,742],{"href":741},"\u002Fdocs\u002Fextensions","Extensions",") is also an MCP tool of its own. Its name is\n",[13,745,746],{},"ext_"," plus the tool's full name with ",[13,749,71],{}," and ",[13,752,753],{},"-"," made ",[13,756,757],{},"_",":\n",[13,760,761],{},"app.jawb.uat.run"," becomes ",[13,764,765],{},"ext_app_jawb_uat_run",". A name longer than 64\ncharacters, or one that would clash with another, is cut and ends in 8\nhex digits of a hash of the full name, so it stays the same from one list\nto the next. The tool's input schema is the extension's own, and its\ndescription starts with ",[13,768,769],{},"[extension \u003Cid> \u003Cversion>, \u003Ctrust>]",", where the\ntrust is ",[13,772,773],{},"builtin",[13,775,776],{},"listed",[13,778,779],{},"unlisted",[13,781,782],{},"dev",[13,784,785],{},"signed",". The tool's\ntitle is its full name.",[788,789,790,828,858,881],"ul",{},[791,792,793,797,798,800,801,803,804,806,807,809,810,812,813,816,817,820,821,824,825,827],"li",{},[794,795,796],"strong",{},"Workflow tools"," (such as ",[13,799,761],{},") run in ",[13,802,15],{},", the\nsame way as ",[13,805,647],{},": every step is an ordinary ",[13,808,34],{}," call that\n",[13,811,30],{}," decides and traces as part of the run. With a ",[13,814,815],{},"progressToken",",\nthe host gets one progress notification per step (",[13,818,819],{},"A step 2: expect_text","). Cancelling the call closes the tabs the run left open and\nends the run as ",[13,822,823],{},"canceled",". Reports and screenshots are written under\nthe working directory ",[13,826,15],{}," was started in.",[791,829,830,833,834,836,837,839,840,843,844,847,848,850,851,853,854,857],{},[794,831,832],{},"API tools"," (the ",[13,835,621],{}," shape) run inside ",[13,838,30],{},", which decides\ntheir effect like any other action. A confirm-class call returns\n",[13,841,842],{},"E_CONFIRMATION_REQUIRED"," with a ",[13,845,846],{},"ct_"," token. The ",[13,849,746],{}," tool takes only\nthe extension's own input, so to go ahead the model calls\n",[13,852,615],{}," with the tool's full name, the same input and\n",[13,855,856],{},"confirm_token",". A purchase-like call is held for a human, as below.",[791,859,860,863,864,866,867,869,870,873,874,876,877,880],{},[794,861,862],{},"The list follows the daemon."," ",[13,865,15],{}," reads the installed\nextensions from ",[13,868,30],{}," when the host lists tools, and checks again\nevery 5 seconds. When the list changes (an install, a removal, an\nextension disabled), it sends ",[13,871,872],{},"notifications\u002Ftools\u002Flist_changed",", and\nthe host lists the tools again. Listing tools does not start ",[13,875,30],{},":\nuntil it runs, only the ",[13,878,879],{},"jawb_*"," tools are listed.",[791,882,883,884,886,887,889],{},"Extension tools need a ",[13,885,30],{}," at API level 21 or later, and\n",[13,888,615],{}," level 26.",[10,891,892,893,895,896,898],{},"Page tools (WebMCP) are listed by ",[13,894,600],{}," but cannot be called:\n",[13,897,30],{}," has no way to invoke them yet.",[78,900,902],{"id":901},"left-out-on-purpose","Left out on purpose",[10,904,905],{},"Administration stays a human task in the CLI. It is not offered to the\nmodel:",[788,907,908,911,920,928,933,941,944,949],{},[791,909,910],{},"profile create, use and delete;",[791,912,913,750,916,919],{},[13,914,915],{},"config set",[13,917,918],{},"config reload",";",[791,921,922,750,925,919],{},[13,923,924],{},"secret set",[13,926,927],{},"secret rm",[791,929,930,919],{},[13,931,932],{},"cookies clear",[791,934,935,750,938,919],{},[13,936,937],{},"storage import",[13,939,940],{},"storage export",[791,942,943],{},"extension install, load and remove;",[791,945,946,919],{},[13,947,948],{},"confirm",[791,950,951,71],{},[13,952,953],{},"daemon stop",[10,955,956,957,194,960,194,963,750,966,969],{},"In this version, ",[13,958,959],{},"upload",[13,961,962],{},"download",[13,964,965],{},"media",[13,967,968],{},"emulate"," are left out\ntoo.",[73,971,973],{"id":972},"confirmations-and-held-actions","Confirmations and held actions",[10,975,976,977,981,982,985],{},"The daemon decides each Act call exactly as it does for the CLI (see\n",[18,978,980],{"href":979},"\u002Fdocs\u002Fcli\u002Fpolicy","Policy and confirmation","). No Act tool has a ",[13,983,984],{},"yes","\nargument, so the model always sees what it is about to confirm.",[788,987,988,1003,1020],{},[791,989,990,993,994,996,997,999,1000,1002],{},[794,991,992],{},"Confirm class"," (an upload, a password form, and similar): the result\nis an error, ",[13,995,842],{},", with a summary and a single-use\n",[13,998,846],{}," token. To go ahead, the model calls the same tool again with\n",[13,1001,856],{},". That token is the only one the server accepts.",[791,1004,1005,1008,1009,1012,1013,1016,1017,71],{},[794,1006,1007],{},"JavaScript dialogs",": an Act tool dismisses any dialog its action opens,\nunless the call passes ",[13,1010,1011],{},"dialog: \"accept\""," (and ",[13,1014,1015],{},"dialog_text"," for a\nprompt). Accepting a dialog that reads like a purchase, or one on a\ncheckout page, is held like a purchase. The dialog's text in the diff\nis the page's, marked ",[13,1018,1019],{},"untrusted",[791,1021,1022,1025,1026,1029,1030,1032,1033,1036,1037,1039,1040,1043,1044,1046,1047,1050],{},[794,1023,1024],{},"Purchase-like",": the daemon holds the action and returns a ",[13,1027,1028],{},"pc_"," id.\n",[13,1031,15],{}," cannot approve it, and nothing it can do will. A human\napproves or denies it in the jawb desktop app, at the OS verification\nprompt, or by running ",[13,1034,1035],{},"jawb confirm \u003Cpc>"," in their own terminal. The\nmodel then calls ",[13,1038,672],{}," with ",[13,1041,1042],{},"pending"," set to the ",[13,1045,1028],{}," id\n(and ",[13,1048,1049],{},"timeout_ms"," to wait) to collect the result.",[73,1052,1054],{"id":1053},"untrusted-page-content","Untrusted page content",[10,1056,1057,1058,318,1060,750,1062,1064,1065,1068,1069,1072],{},"Page text, titles, labels and the descriptions of page-declared tools come\nfrom the web. They are content, not instructions. In ",[13,1059,457],{},[13,1061,472],{},[13,1063,600],{}," results, the page text follows a line written\nby jawb that says so, and ",[13,1066,1067],{},"structuredContent.trust"," is\n",[13,1070,1071],{},"\"untrusted_page_content\""," on every result that can carry page text. The\nlabelling is advice to the model. It does not stop a prompt injection, so\nthe policy and the human approvals above are what protect you.",[10,1074,1075],{},"The output of an extension tool comes from the extension's code, or from\nthe API it called. Its text result starts with a line written by jawb that\nsays the output is untrusted, and an extension tool's description is the\nextension author's, behind the trust prefix described above.",[73,1077,1079],{"id":1078},"credentials","Credentials",[788,1081,1082,1091,1098],{},[791,1083,1084,1086,1087,1090],{},[13,1085,15],{}," reads ",[13,1088,1089],{},"daemon.token"," from the data directory, the same way\nevery CLI command does. It accepts no credential from the MCP host.",[791,1092,1093,1094,1097],{},"It never reads ",[13,1095,1096],{},"confirm.token",", the credential that approves held\nactions, and it has no code that calls the approve or deny routes.",[791,1099,1100,1101,1104,1105,318,1108,322,1111,1114,1115,1117,1118,1121,1122,71],{},"Results never contain the daemon token, a path under the data\ndirectory or the path of the vault keyfile (",[13,1102,1103],{},"jawbd --vault-keyfile",").\nIf one shows up in a daemon answer, it is replaced with ",[13,1106,1107],{},"\u003Credacted>",[13,1109,1110],{},"\u003Cdata_dir>",[13,1112,1113],{},"\u003Cvault_keyfile>",". ",[13,1116,364],{}," reports the vault\nstore as ",[13,1119,1120],{},"keyfile"," without its path, gives only the file name of the\nbridge's Chrome executable, and replaces any other absolute local path\nwith ",[13,1123,1124],{},"\u003Clocal_path>",[73,1126,1128],{"id":1127},"what-it-is-not","What it is not",[788,1130,1131,1140],{},[791,1132,1133,1136,1137,1139],{},[794,1134,1135],{},"It is not a security boundary."," An agent that can run shell commands\ncan run the ",[13,1138,43],{}," CLI directly. The MCP tool list keeps\nadministration and human-only steps out of the model's view. The\nprotection comes from the daemon's policy and the human approval steps,\nnot from the MCP server.",[791,1141,1142,1148,1149,1152,1153,1155,1156,1158],{},[794,1143,1144,1147],{},[13,1145,1146],{},"client"," is a claim."," Each request carries\n",[13,1150,1151],{},"x-jawb-client: jawb-mcp\u002F\u003Cversion>",", which ",[13,1154,30],{}," records as the trace\nstep's ",[13,1157,1146],{},". That label comes from the client itself. Read it as\na hint about which tool made a step, not as proof of who did.",[73,1160,1162],{"id":1161},"protocol-details","Protocol details",[788,1164,1165,1168,1198,1236,1261],{},[791,1166,1167],{},"Transport: stdio, one JSON-RPC 2.0 message per line. stdout carries only\nprotocol messages, and logs go to stderr. When stdin closes, the server\nlets calls that are still running answer (for up to 10 seconds), then\nexits.",[791,1169,1170,1171,1174,1175,1178,1179,318,1182,750,1185,1188,1189,1192,1193,1195,1196,71],{},"Protocol revisions: ",[13,1172,1173],{},"2026-07-28",", where each request names its revision\nand ",[13,1176,1177],{},"server\u002Fdiscover"," lists the supported ones. Also ",[13,1180,1181],{},"2025-11-25",[13,1183,1184],{},"2025-06-18",[13,1186,1187],{},"2025-03-26",", which use the ",[13,1190,1191],{},"initialize"," handshake.\n",[13,1194,1187],{}," clients get the envelope as a second text block, because\nthat revision has no ",[13,1197,333],{},[791,1199,1200,1201,194,1204,194,1207,1210,1211,1214,1215,194,1217,1219,1220,1222,1223,1225,1226,1228,1229,1232,1233,71],{},"Supported: ",[13,1202,1203],{},"tools\u002Flist",[13,1205,1206],{},"tools\u002Fcall",[13,1208,1209],{},"ping",", cancellation\n(",[13,1212,1213],{},"notifications\u002Fcancelled","), progress notifications while\n",[13,1216,495],{},[13,1218,672],{}," or a workflow extension tool runs (when\nthe request carries a ",[13,1221,815],{},"), and\n",[13,1224,872],{},": to a host that used ",[13,1227,1191],{},",\nand on each ",[13,1230,1231],{},"subscriptions\u002Flisten"," stream that asked for\n",[13,1234,1235],{},"toolsListChanged",[791,1237,1238,1239,1242,1243,1246,1247,1250,1251,1254,1255,1258,1259,71],{},"Errors: an unknown tool or invalid arguments get ",[13,1240,1241],{},"-32602",", malformed\nJSON ",[13,1244,1245],{},"-32700",", an unknown method ",[13,1248,1249],{},"-32601",", and an unsupported revision\n",[13,1252,1253],{},"-32022",". A daemon error is a tool result with ",[13,1256,1257],{},"isError: true"," and the\nenvelope's ",[13,1260,325],{},[791,1262,1263,1266,1267,1270],{},[13,1264,1265],{},"JAWB_MCP_TRANSCRIPT=\u003Cfile>"," appends every message, in and out, to\n",[13,1268,1269],{},"\u003Cfile>"," as JSON lines, with screenshot data left out. Nothing secret\ngoes into it, because nothing secret passes through the server.",[1272,1273,1274],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":88,"searchDepth":167,"depth":167,"links":1276},[1277,1282,1283,1286,1287,1288,1289,1290],{"id":75,"depth":167,"text":76,"children":1278},[1279,1280,1281],{"id":80,"depth":176,"text":81},{"id":139,"depth":176,"text":140},{"id":221,"depth":176,"text":222},{"id":307,"depth":167,"text":308},{"id":735,"depth":167,"text":641,"children":1284},[1285],{"id":901,"depth":176,"text":902},{"id":972,"depth":167,"text":973},{"id":1053,"depth":167,"text":1054},{"id":1078,"depth":167,"text":1079},{"id":1127,"depth":167,"text":1128},{"id":1161,"depth":167,"text":1162},"jawb mcp: jawb's tools for Claude Code, Cursor, Claude Desktop and any other MCP host, over the same \u002Fv1 API and policy as the CLI.",{},true,null,"\u002Fdocs\u002Fmcp",{"title":5,"description":1291},"docs\u002F8.mcp","kjjq0y70TY9DiBuSFyIpoYi048usBdIUxO3dMBJEyJU",[1300],{"title":1301,"path":1302,"stem":1303,"children":1304},"Documentation","\u002Fdocs","docs\u002F1.index",[1305,1306,1310,1312,1316,1336,1373,1387,1391,1395,1399,1400],{"title":1301,"path":1302,"stem":1303},{"title":1307,"path":1308,"stem":1309},"Protocol adapters","\u002Fdocs\u002Fprotocol","docs\u002F10.protocol",{"title":742,"path":741,"stem":1311},"docs\u002F11.extensions",{"title":1313,"path":1314,"stem":1315},"Roadmap and status","\u002Fdocs\u002Froadmap","docs\u002F12.roadmap",{"title":1317,"path":1318,"stem":1319,"children":1320},"Getting started","\u002Fdocs\u002Fgetting-started","docs\u002F2.getting-started\u002F1.index",[1321,1322,1326,1330,1332],{"title":1317,"path":1318,"stem":1319},{"title":1323,"path":1324,"stem":1325},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F2.getting-started\u002F2.installation",{"title":1327,"path":1328,"stem":1329},"Desktop app","\u002Fdocs\u002Fgetting-started\u002Fdesktop-app","docs\u002F2.getting-started\u002F3.desktop-app",{"title":58,"path":57,"stem":1331},"docs\u002F2.getting-started\u002F4.running-the-daemon",{"title":1333,"path":1334,"stem":1335},"Using the CLI","\u002Fdocs\u002Fgetting-started\u002Fusing-the-cli","docs\u002F2.getting-started\u002F5.using-the-cli",{"title":1337,"path":1338,"stem":1339,"children":1340},"CLI reference","\u002Fdocs\u002Fcli","docs\u002F3.cli\u002F1.index",[1341,1342,1346,1349,1353,1357,1361,1363,1367,1369],{"title":1337,"path":1338,"stem":1339},{"title":1343,"path":1344,"stem":1345},"JSON envelope and exit codes","\u002Fdocs\u002Fcli\u002Fjson-and-exit-codes","docs\u002F3.cli\u002F10.json-and-exit-codes",{"title":372,"path":1347,"stem":1348},"\u002Fdocs\u002Fcli\u002Fstatus","docs\u002F3.cli\u002F2.status",{"title":1350,"path":1351,"stem":1352},"Tabs, profiles and sessions","\u002Fdocs\u002Fcli\u002Ftabs-and-profiles","docs\u002F3.cli\u002F3.tabs-and-profiles",{"title":1354,"path":1355,"stem":1356},"jawb observe [\u003Curl>] [--full] [--interactive-only] [--js]","\u002Fdocs\u002Fcli\u002Fobserve","docs\u002F3.cli\u002F4.observe",{"title":1358,"path":1359,"stem":1360},"jawb read [--format md|text|json] [--element \u003Cid>] [--full] [--js]","\u002Fdocs\u002Fcli\u002Fread","docs\u002F3.cli\u002F5.read",{"title":555,"path":554,"stem":1362},"docs\u002F3.cli\u002F6.act",{"title":1364,"path":1365,"stem":1366},"See commands","\u002Fdocs\u002Fcli\u002Fsee","docs\u002F3.cli\u002F7.see",{"title":980,"path":979,"stem":1368},"docs\u002F3.cli\u002F8.policy",{"title":1370,"path":1371,"stem":1372},"Install lifecycle and profile settings","\u002Fdocs\u002Fcli\u002Flifecycle","docs\u002F3.cli\u002F9.lifecycle",{"title":1374,"path":1375,"stem":1376,"children":1377},"SDK reference","\u002Fdocs\u002Fsdk","docs\u002F4.sdk\u002F1.index",[1378,1379,1383],{"title":1374,"path":1375,"stem":1376},{"title":1380,"path":1381,"stem":1382},"Rust SDK — jawb-sdk-rust","\u002Fdocs\u002Fsdk\u002Frust-sdk","docs\u002F4.sdk\u002F2.rust-sdk",{"title":1384,"path":1385,"stem":1386},"Website SDK — @4hum-ai\u002Fjawb-sdk","\u002Fdocs\u002Fsdk\u002Fwebsite-sdk","docs\u002F4.sdk\u002F3.website-sdk",{"title":1388,"path":1389,"stem":1390},"Configuration","\u002Fdocs\u002Fconfig","docs\u002F5.config",{"title":1392,"path":1393,"stem":1394},"WebMCP","\u002Fdocs\u002Fwebmcp","docs\u002F6.webmcp",{"title":1396,"path":1397,"stem":1398},"Agents","\u002Fdocs\u002Fagents","docs\u002F7.agents",{"title":5,"path":1295,"stem":1297},{"title":1401,"path":1402,"stem":1403},"Security and trust","\u002Fdocs\u002Fsecurity","docs\u002F9.security",1792595702194]