{"name":"com.recipebooq/recipebooq","slug":"recipebooq","title":"recipebooq","description":"Design a React Native app in a browser and emit it as a real Expo project you own, iOS and Android.","url":"https://mcp.market/server/recipebooq","rating":null,"grade":"C","score":60,"certified":false,"status":"active","category":"scraping","tags":["scraping","media"],"presence":{"score":8,"stars":null,"forks":null,"downloads_week":null,"last_push_at":null,"license":null},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":null,"website":"https://recipebooq.com","version":"0.2.0","remotes":[{"type":"streamable-http","url":"https://recipebooq.com/api/mcp"}],"packages":[],"tools":[{"name":"add_screen","description":"PAID. Adds one new screen to an app that was already exported: the screen file, the route that mounts it, the exact line to register it, and how to navigate to it. Reads the .recipebooq/files.json manifest to work out the route tree and never reads or rewrites existing source, so the one edit to an existing file comes back as a line to add rather than a file to overwrite.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"compositionId":{"type":"string","description":"share code for the new screen, from the composer"},"manifest":{"type":"object","description":"the parsed .recipebooq/files.json from the project root"},"tab":{"type":"string","description":"nest it in this tab's stack so the tab bar stays visible. Omit to put it at the root, where it covers the tab bar (right for a modal)."},"componentName":{"type":"string","description":"React component name, e.g. \"InvoiceDetail\". Defaults to GeneratedScreen."}},"required":["compositionId","manifest"]}},{"name":"check_snippet","description":"Takes TSX that uses these components and returns the glass-safety problems in it: animated opacity, the flex:1 collapse, the clipped lens, the conditional mount. Read-only, it never touches the repo. A heuristic text scan, not a structural guarantee.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"code":{"type":"string","description":"the TSX snippet to check"}},"required":["code"]}},{"name":"emit_app","description":"PAID. Turns a recipebooq canvas into a working Expo app: navigation, providers, tab bar, screens and the components they need. Returns a recipe to apply to the current project: the exact files with target paths, the dependency install line, and ordered steps. Files marked `skeleton` or `component` are hand-written and device-verified, and verify_app reports any that were changed. Needs the share code from the composer's \"Share for agent\" button.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"appId":{"type":"string","description":"the share code, e.g. \"34ca4babb2\""},"override":{"type":"boolean","description":"emit even when screens are flagged as not ready. Ask the customer first; the flags exist for a reason."}},"required":["appId"]}},{"name":"emit_screen","description":"PAID. Turns one composed screen into a TSX file for an app that already exists, with its own navigator and routes. Returns the complete file inline, the components to install first, and how to mount it. For a whole app with navigation and a tab bar, emit_app is the matching tool. Needs the share code from the composer.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"compositionId":{"type":"string","description":"the share code, e.g. \"34ca4babb2\""},"componentName":{"type":"string","description":"React component name for the file, e.g. \"CheckoutScreen\". Defaults to GeneratedScreen."}},"required":["compositionId"]}},{"name":"find_component","description":"Takes a UI need in plain language and returns ranked components, including an explicit answer when this catalog deliberately does not ship something and the OS's own control is the right choice. Useful before building a UI control by hand.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"need":{"type":"string","description":"e.g. \"a progress bar for an upload\""}},"required":["need"]}},{"name":"get_component","description":"Everything needed to write a correct call site for one component: props with types, defaults and value domains, platform applicability, dependencies, and the runtime rules that apply to it. The rules matter as much as the props: correct props that break a rule still render a blank screen.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","description":"e.g. \"button\""}},"required":["slug"]}},{"name":"get_provider_tree","description":"The exact app-root provider nesting these components require, in the order that works. Getting it wrong fails at runtime, not at compile time. Pass the components in use to see which providers each one needs.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"components":{"type":"array","items":{"type":"string"},"description":"optional slugs in use"}}}},{"name":"get_rules","description":"The runtime rules for this catalog: the mistakes that make native Liquid Glass render blank with no warning, no error and no red box. Pass a slug to scope them to one component. Relevant before writing animation or layout code around a glass component.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","description":"optional — omit for catalog-wide rules"}}}},{"name":"get_step","description":"FREE. Expands one step of an emit_app recipe: the full instruction, why it matters, how to know it worked, and what to do when it did not. emit_app returns steps in short form to stay inside the response budget, so this carries the detail for any step that needs it. Needs the same share code and the step's id.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"appId":{"type":"string","description":"the share code you passed to emit_app"},"stepId":{"type":"string","description":"the step id, e.g. \"configure\" or \"write\""}},"required":["appId","stepId"]}},{"name":"get_theme_tokens","description":"The theme system: which hooks to call, and the spacing, radius and typography scales. Token names rather than hex values are what let a retheme propagate.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"install_component","description":"PAID. Adds one component to an existing project. Returns the transitive registry closure in dependency-first install order, the single `expo install` line for the whole closure, every file with its exact target path, the provider nesting it needs, and its runtime rules. It replaces fetching /r/*.json by hand: a component is a closure, not a file, and the ways to get that wrong all fail silently. Foundation components need no licence key.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","description":"the component slug, e.g. \"button\" or \"sheet\""}},"required":["slug"]}},{"name":"list_components","description":"Lists the shipped @recipebooq/ui components: slug, purpose, category, and which render the real iOS system control versus our own component. Cheap, and a good first call. Optional filters: category and tech.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"category":{"type":"string","enum":["controls","chrome","surfaces"]},"tech":{"type":"string","enum":["system","glass","blur"]}}}},{"name":"update_components","description":"PAID. Reports what has changed in the recipebooq-supplied files since export and returns only what moved. Reads the .recipebooq/files.json the export wrote into the project, so no share code is needed and it works months later. Never touches the customer's own screens, and flags the rare change that needs a code edit rather than a re-copy. This is how the components and app shell we supplied stay current as iOS and Android move.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"manifest":{"type":"object","description":"the parsed contents of .recipebooq/files.json from the project root (the whole object, or just its `files` array)"}},"required":["manifest"]}},{"name":"verify_app","description":"PAID. Checks that an emitted app was applied correctly, before it is built. Takes what was written (file paths with byte sizes, package.json dependencies, project config) and returns what is missing, which copy-verbatim files were altered, which packages are absent, and whether the config merge expo-router needs was done. Catches the four ways a long recipe goes wrong, each of which fails silently or points somewhere else.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"appId":{"type":"string","description":"the share code you passed to emit_app"},"files":{"type":"array","description":"what you actually wrote: { path, bytes } per file, path relative to the project root. `bytes` must be the file's size in BYTES on disk (what `wc -c` reports), not its character count — the two differ for any file containing a non-ASCII character.","items":{"type":"object","properties":{"path":{"type":"string"},"bytes":{"type":"number","description":"size in bytes on disk, as `wc -c` reports"},"sha":{"type":"string","description":"optional; when present it is authoritative and the byte check is skipped for that file"}},"required":["path"]}},"dependencies":{"type":"array","items":{"type":"string"},"description":"the keys of package.json's dependencies"},"config":{"type":"object","properties":{"main":{"type":"string","description":"package.json \"main\""},"scheme":{"type":"string","description":"app.json scheme"},"plugins":{"type":"array","items":{"type":"string"},"description":"app.json plugins"},"userInterfaceStyle":{"type":"string","description":"app.json userInterfaceStyle"},"moduleSuffixes":{"type":"array","items":{"type":"string"},"description":"tsconfig compilerOptions.moduleSuffixes"}}}},"required":["appId","files"]}}],"scan":{"score":60,"grade":"C","scanned_at":"2026-09-19T10:16:33.524Z","report":{"scannerVersion":"0.1.3","scannedAt":"2026-09-19T10:16:33.505Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1258ms"]},"poisoning":{"score":15,"max":15,"notes":["14 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 3 write-action tools with no auth"]},"maintenance":{"score":3,"max":15,"notes":["no repository listed"]},"identity":{"score":4,"max":10,"notes":["verified namespace with website, no repo"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"},{"id":"maint.no-repo","severity":"low","component":"maintenance","title":"No source repository listed"}],"inputs":{"probes":[{"url":"https://recipebooq.com/api/mcp","reachable":true,"authRequired":false,"latencyMs":1258,"serverInfo":{"name":"recipebooq","version":"0.2.0"}}],"packages":[],"repo":{"found":false},"icon":{"url":"https://recipebooq.com/icon?88256693c7f6717a","source":"site","width":32,"height":32},"presence":{"stars":null,"forks":null,"downloadsWeek":null,"license":null,"lastPushAt":null,"score":8}}}},"grade_history":[],"reviews":[]}