728,028 tools. Updated 2026-10-31 08:17
"Bricks" matching MCP tools:
- Listet die geplanten Einheiten eines Zeitraums — **mit ids und Schritten**, aelteste zuerst. Das ist das Gegenstueck zu training_plan_create: erst hier siehst du, was tatsaechlich im Kalender steht, und nur ueber die ids kann training_plan_update etwas davon aendern. training_stats mit include_planned zaehlt bloss (5 geplant, 3 erledigt) und nennt keine einzelne Einheit. **Das Standardfenster liegt in der Zukunft** — heute bis heute + days, weil ein Plan bevorsteht. Fuer die Rueckschau auf verpasste Einheiten from/to setzen. **Fuer eine einzelne Einheit id setzen** — das ist zugleich der Ersatz fuer ein training_get auf eine Planung. training_get kennt nur absolvierte Einheiten: geplante liegen in einer eigenen Tabelle mit eigenem id-Raum, und Streams, Runden und Zonen gibt es fuer sie nicht. Wer es doch versucht, bekommt von training_get einen Verweis hierher statt einer Fehlermeldung. Eine Einheit gilt als erledigt, wenn sie als erledigt markiert ist **oder** der Import eine Aktivitaet mit ihr verknuepft hat; only_open zeigt genau die uebrigen. Dieselbe Regel benutzt training_stats — waeren es zwei Regeln, wuerden die Tools einander widersprechen. **Sortiert nach Zeitpunkt, nicht nur nach Tag.** start_time ist die Ortszeit des Athleten; steht time_of_day daneben, ist die Uhrzeit noch offen und start_time nur der Platzhalter des Tagesfachs (morgens 08:00, nachmittags 15:00, abends 20:00). Einheiten ohne jede Zeitangabe liegen mittags. garmin_workout_id sagt, ob die Einheit schon auf der Uhr liegt. Steht dort eine id, traegt die Uhr nach einer Aenderung weiter den alten Stand, bis die Einheit erneut an Garmin geschickt wird. **Koppelläufe (Brick)** tragen brick_of (id des Rads); brick beschreibt das Paar von beiden Seiten: group = id des Rads, position 1 = Rad, 2 = Koppellauf, size = Teile des Bricks, partner_ids = die anderen Teile — auch wenn sie wegen Filter oder limit nicht in items stehen. Im Text: "Brick 1/2", "Brick 2/2". Rad und Lauf stehen im selben Tagesfach (gleiche start_time mit ~), der Lauf beginnt am Radende. Args: - id (string, optional): genau eine Einheit. Schlaegt from/to/days/sport/only_open. - from (string, optional): Startdatum YYYY-MM-DD, inklusive. Default heute. - to (string, optional): Enddatum YYYY-MM-DD, inklusive. Default from + days - 1. - days (number): 1-365, default 28 (vier Wochen). Wirkt nur, solange to fehlt. - sport (string, optional): SWIM | BIKE | RUN | LONGRUN | STRENGTH | MOBILITY | YOGA | HIIT | CARDIO | WALK | HIKE | ALPINE_SKI | NORDIC_SKI | SOCCER | RACKET | OTHER - include_steps (boolean, default true): Intervallschritte mit ausgeben - only_open (boolean, default false): nur Einheiten, die weder erledigt noch verknuepft sind - limit (number): 1-200, default 50 **Renntage im Fenster werden markiert** (race_days, und je Einheit race_day), aus derselben Tabelle wie training_race_list — ein Rennen ist keine geplante Einheit und steht deshalb nicht in items. Einheiten am **Tag davor** tragen race_eve ({ id, name, priority, risk }); risk ist true bei HARD/VERY_HARD, einem Test im Titel oder mehr als 90 min — dieselbe Regel, nach der training_plan_create/_update warnen. **planned_tss je Einheit** — aus den Schritten gegen die **heutige** Schwelle gerechnet (Rad ftp, Lauf Schwellenpace, Schwimmen CSS mit IF^3; ohne Ziel IF nach Schritttyp), nicht gespeichert: nach einem FTP-Test sinkt die TSS derselben 230 W von selbst. planned_tss_method: steps | intensity (Dauer x Intensitaetslabel) | engine_target (Kraft: "Ziel N TSS" der Plan-Engine) | per_minute (Kraft/Mobility). planned_tss_estimated: true, wenn nichts davon an einer gesetzten Schwelle haengt (z.B. Schwimmen ohne CSS) — im Text mit ≈ markiert. null = weder Schritte noch Dauer. **Harte Einheiten an schlechten Tagen tragen readiness_warning** ({ status YELLOW|RED, date, reasons }): HARD/VERY_HARD und die Readiness-Ampel des Tages ist gelb oder rot — fuer eine Einheit morgen gilt der heutige Stand, weiter voraus gibt es keine Warnung. Dieselbe Bewertung wie training_readiness. Returns: { from, to, count, has_more, race_days: [{ id, date, name, priority, format, status }], items: [{ id, date, start_time, time_of_day, sport, title, duration_min, distance_km, intensity, planned_tss, planned_tss_estimated, planned_tss_method, completed, done, matched_activity_ids, notes, pool_length_m, garmin_workout_id, brick_of, brick: { group, position, size, partner_ids } | null, race_day, race_eve, readiness_warning, steps: [{ order, type, title, duration_min, duration_sec, distance_km, stroke, equipment, exercise?, reps?, weight_kg?, target_kind, target_low, target_high, target_pace, target_heart_rate, target_power, notes }] }] } — exercise/reps/weight_kg stehen nur bei KraftschrittenConnectorOAuth
- Pre-diligence framework for a business broker or buyer evaluating a target: SDE framing (why the discretionary-earnings figure, not net income or raw EBITDA, is the relevant number, and what typically gets added back), a category multiple range the model must research fresh and date-stamp (never a hardcoded table), a public-signal red-flag checklist run before any financials are shared, and a prioritized seller-question list built from the specific gaps the research actually surfaces. Example invocations: - "Prep me for diligence on a brewery taproom listed in Minneapolis, MN" - "What questions should I ask the seller of a hair salon in Wichita, KS before I make an offer?" - "This restaurant is asking $650K — what red flags should I check before taking that seriously?" - "I'm looking at a nail salon in Tampa, FL asking $310K — sanity-check that against category multiples before I meet the seller"ConnectorNo auth
- Use this when you need to know whether a part will hold a load. Runs a linear-static structural study and returns evidence — peak von Mises stress (MPa), peak displacement (mm), the minimum safety factor against the material yield (taken away from the clamp-singular edges of the fixed faces; the raw clamp-edge peak is reported separately as peakAtSupportMPa), per-region hot spots named by @kc[...] face ref, mesh trust flags, an equilibrium residual, and (CalculiX only) stress-heatmap PNG paths. The study is EITHER declared in the script with `shape.feaStudy({ material, fixed, loads, meshSize?, minSafetyFactor? })` OR passed on the call against the shape the script returns: { code: 'return box(100, 20, 10);', material: 'aluminum-6061', fixed: { atX: 0 }, loads: [{ faces: { atX: 100 }, force: [0, 0, -200] }] }. Faces are a FaceQuery ({ atX | atY | atZ, byNormal: 'Z', ofSurfaceType, near: [x,y,z], ... }; with near it names the ONE matching face nearest the point), a face label ('top', 'bottom', 'left', 'right', 'front', 'back'; it must name ONE face — after a boolean 'top' can be several, which is an error listing them) or an @kc[...] ref. Force is the TOTAL [Fx, Fy, Fz] in N on those faces (a scalar force + direction is accepted). Materials: mild-steel, aluminum-6061, pla, petg, abs, nylon (aliases steel, aluminum), or { E, nu, yield } in MPa. Solver (`solver`, default 'auto'): CalculiX + gmsh quadratic tets when that toolchain is installed; otherwise the built-in in-process voxel solver (8-node incompatible-mode bricks), which needs nothing installed and is marked summary.solver 'in-process-voxel' with trust.meshTrusted false — an estimate (accurate for prismatic bending, approximate at curved faces and notches), never a verified pass. solver: 'calculix' fails up front with fea.solver.unavailable and the install command when the toolchain is absent. Also: `study` (a declared study name; default the last), `output_dir` (keeps the deck / summary JSON), `mesh_size` (mm, overrides the study for this run), `heatmaps: false` for a numbers-only run. CalculiX mesh refinement is automatic: when the stress is untrusted only because the solver's error estimate is high, it re-solves once at 0.75x the element size (inside the element budget), with summary.refinement listing each pass. `refine: false` solves once.ConnectorNo auth
- Asks a person at Brick & Mortar to read the public record for them, for a fixed fee: a site screen for a lender or environmental consultant, a diligence packet on a deal, a register check across a landlord's portfolio, a weekly work route for a contractor. Call with no arguments to see the engagements, their prices and turnaround — those come from the live page, never from memory. Call with `engagement`, `who`, `email` and `detail` to file the enquiry; a person replies by email. Nothing is quoted, charged or scheduled here. Offer this only after the free tools have been tried or when the person asks for someone to do the work. Before filing, confirm with them what will be sent. Pass their EMAIL and DETAIL exactly as written. Never say it was sent unless `status` is `filed`. Example invocations: - "Can someone there just run this site for me? I'm an SBA lender." - "I want the diligence packet on this deal — here's my email."ConnectorDestructiveNo auth
- Make a matching, seamlessly tiling texture SET for a material: a colour map, a normal map and a packed ambient-occlusion / roughness / metalness map, rendered by R3 from a procedural recipe (seeded noise, stones, bricks …). Nothing is uploaded and it is free. The maps are stored as images in the account (the owner sees them in the Images browser as "<name> · albedo.png" …). Start from a preset (gravel, sand, concrete, bricks, brushedMetal) with optional controls: seed (another variation), scale (an integer: finer pattern), colours (the ramp's "#rrggbb" stops, exactly as many colours as the preset has: gravel 3, sand 2, concrete 3, bricks 3, brushedMetal 3), contrast, bumpiness (normal strength), roughness {min, max} (from the smooth parts to the rough parts), metalness (0 = not metal, 1 = metal; metal looks dark without an environment map in the scene), size (256 / 512 / 1024 / 2048, default 1024), tileWorldSize (metres one tile covers, default 1), height (also store a 16-bit height map). Or pass a full `recipe` (r3_docs_read("TEXTURE_RECIPES.md") has the format and every preset's recipe). An invalid recipe is refused with the path of the problem. Pass `apply` {projectId, material, repeat | worldSize (a number, or {x, y} for a long strip)} to put it on a material in the same call (as r3_texture_apply). You cannot see the texture: the answer gives numbers (mean colour, brightness range, height spread, seam check) and the colour map's url; r3_editor_capture shows it in an open editor. Names are unique per account. Each call makes a NEW set; reuse a set with r3_texture_apply.ConnectorDestructiveNo auth
- List the available BrickYourFace mosaic sizes (baseplates), prices and shipping, and how ordering works. Call this before creating a preview if the person asks about sizes or price.ConnectorNo auth
Matching MCP Servers
- AlicenseBqualityAmaintenanceComprehensive MCP server for Bricks Builder with 100+ tools to manage pages, templates, styles, SEO, and content directly from AI assistants like Claude Code.11592MIT
- AlicenseNot gradedqualityBmaintenanceA WordPress plugin that enables AI assistants to manage Bricks Builder sites through natural language. It provides over 20 tools for reading and writing pages, templates, global styles, and WooCommerce layouts directly from MCP-compatible clients.125GPL 2.0
Matching MCP Connectors
Free joined public records for small business and CRE: Twin Cities parcels, sales, licences
Turn a photo into a LEGO-compatible brick mosaic kit: watermarked preview, price and buy link.
- Sends a feature request, a data request or a correction straight to the person who builds this server — free, no account, and it reaches a real inbox. Use it whenever this server falls short of what the user actually wanted: a question it cannot answer, a dataset or column it does not hold, a city or sector it does not cover, or an answer from one of these tools that looks wrong. Reaching a wall is not the end of the turn; offer to file it. Before calling, ask for what you do not have — what they were trying to do, which city/sector/dataset it concerns, and whether they want a reply at an email address. Do not demand any of it: file what you have. Pass their REQUEST and their EMAIL exactly as they wrote them, never a paraphrase or a corrected address; write `context` yourself. Tell them what you filed in one line afterwards so they can correct you, and never say it was sent unless `status` came back `filed`. Example invocations: - "I wish this could tell me the lease rate — can you ask them to add it?" - "Do they cover Duluth? No? Tell them I want it." - "That sale price looks like the wrong year — report it to whoever runs this."ConnectorDestructiveNo auth
- Aendert eine geplante Einheit oder sagt sie ab. Die id kommt aus training_plan_list. Ohne dieses Tool laesst sich ein Plan nur schreiben, nicht revidieren: training_plan_create legt bei geaendertem Titel eine **zweite** Einheit am selben Tag an, statt die erste zu korrigieren. **Nur mitgegebene Felder aendern sich**, alles andere bleibt stehen. Eine Ausnahme: steps **ersetzt** die Struktur vollstaendig, es ergaenzt sie nicht. Wer einen Schritt aendern will, schickt alle Schritte erneut. steps: [] entfernt die Struktur ganz. **Zum Absagen gibt es training_plan_delete.** Dieses Tool aendert nur. **Die Sportart laesst sich nicht aendern.** Sie bestimmt die Garmin-Sportart und die Bedeutung der Zielwerte (Pace beim Laufen, Watt auf dem Rad); im Bestand gedreht bliebe ein Schrittsatz zurueck, der fuer eine andere Sportart gebaut wurde. Sportart korrigieren heisst: absagen und neu anlegen. **Zur Uhr.** Liegt die Einheit schon auf Garmin (garmin_workout_id gesetzt), behaelt die Uhr den alten Stand, bis sie erneut gesendet wird — mit training_plan_push_garmin oder in der App. Die Antwort sagt es dazu. Rueckgaengig mit training_undo. Args: - id (string): id aus training_plan_list - date (string, optional): YYYY-MM-DD, verschiebt die Einheit. **Die Uhrzeit bleibt dabei erhalten** — wer sie mitaendern will, schickt start_time dazu. - start_time (string, optional): "HH:MM" Ortszeit des Athleten; schliesst time_of_day aus - time_of_day (string, optional): MORNING | AFTERNOON | EVENING — Uhrzeit wieder offen - title (string, optional): 1-120 Zeichen - duration_min (integer, optional): 1-1440 - distance_km (number, optional): 0-1000 - intensity (string, optional): EASY | MODERATE | HARD | VERY_HARD - notes (string, optional): Hinweise an den Athleten, NICHT die Struktur - pool_length_m (number | null, optional, nur SWIM): Beckenlänge in Metern (10-100); null entfernt sie. Liegt die Einheit schon auf der Uhr, gilt sie dort erst nach erneutem Senden. - steps (array, optional): ersetzt die Intervallstruktur; Aufbau wie in training_plan_create, inklusive target-Spannen, relativer Ziele und repeat-Bloecken. Relative Ziele werden **jetzt** aufgeloest, gegen die heutigen Schwellenwerte — nicht gegen die von damals. - brick_of (string | null, optional): haengt diese Einheit als **Koppellauf** an die Radeinheit mit dieser id (aus training_plan_list) — fuer Bricks, die ohne brick: true angelegt wurden. Die Einheit wandert dabei an das Rad wie bei training_plan_create mit brick: steht das Rad in einem Tagesfach, ins selbe Fach dahinter; hat es eine feste Uhrzeit, an sein Ende. Danach zieht jedes Verschieben des Rads den Lauf mit, und training_plan_push_garmin sendet beide als **ein** Multisport-Workout. Schliesst date, start_time und time_of_day aus. null loest die Verknuepfung, die Einheit bleibt dann stehen, wo sie ist. Nur an eine Radeinheit desselben Kontos; eine Einheit, an der selbst Koppellaeufe haengen, kann keiner werden. Ein Rad ohne Uhrzeit (00:00 ohne Tagesfach, etwa aus einem aelteren uebernommenen Plan) wird abgelehnt — erst am Rad start_time oder time_of_day setzen. Haengt die Einheit schon an diesem Rad, bleibt sie stehen, wo sie ist (eine eingetragene Wechselzeit geht nicht verloren). **scheduledDate steht in changed, sobald sich die Uhrzeit aendert** — Datum und Uhrzeit liegen in einem Feld. Ob der Tag mitgewandert ist, sagt moved_day; ohne date bleibt der **Kalendertag des Athleten** stehen, auch wenn die Einheit in UTC auf dem Vortag liegt. **Renntage:** liegt die Einheit nach der Änderung als HARD/VERY_HARD, Test ("Test" im Titel) oder über 90 min am Tag eines geplanten Rennens oder am Tag davor, wird trotzdem geaendert — warnings nennt das Rennen. Dasselbe gilt für einen Koppellauf, den das Rad mitzieht ("Koppellauf mitgezogen: ..."). Returns: { id, deleted, changed: [...], date, start_time, moved_day, brick_of, warnings, garmin: { had_workout, removed, note } | null }ConnectorDestructiveOAuth
- Given a real question about a local market or a specific property, returns a source-first RESEARCH PLAN: which public record actually settles the question, how to reach it directly (county parcel GIS, Census CBP/ACS/permits, BLS series, state registries, licences, inspections), what the answer will be worth, and what the public record cannot answer at all. Use it before researching a local market, to find the administrative record that settles the question. Example invocations: - "Where would I actually find what 1420 Grand Ave in Saint Paul last sold for?" - "I want to know if Wichita has room for another dog daycare — what should I pull?" - "How do I find out who really owns this building and what else they own?" - "What public data would tell me if this neighborhood is actually growing?"ConnectorNo auth
- Returns a research framework, not the finished analysis: the procedure, output schema and quality rubric for a defensible local pricing comparison within a category — how to normalize across differing service bundles, and what to do when competitors don't publish prices at all. It holds no prices itself.. This tool fetches no data; the calling model runs the procedure with its own web search and produces the result. Example invocations: - "Benchmark gel manicure pricing across nail salons in Denver, CO" - "Is this brewery's pint pricing in line with the Twin Cities taproom market?" - "Build a pricing comparison for full-service restaurants in Wichita, KS when most don't list prices online"ConnectorNo auth
- Journey — first: find the preset of the genre. Its `done` says what a finished game of that genre has beyond the request: write it into the contract (gripforge_define_game) as required, and gripforge_game_audit checks it at the end. Start here. Search the modular Game Kit catalogue (vehicle.driveable, mission.objectives, npc.wanted, …) by free text, capability, tag or engine target. Pass project_id to score kits against that project: each hit then carries state { installed, enabled, fills, reason } and kits that fill one of its missing capabilities rank first. Kits are bricks that go together: a kit handling the same thing as an installed one is a same-scene overlap (only one active in a scene), never a reason to skip it. Returns { kits, presets }; each kit carries its presentation: name, tagline (one-line hook), tags, targets and status per engine (web / godot / unity / unreal), and cover / coverUrl, the featured landscape image (WebP) to show the user when proposing kits. legacy.* kits play through their existing client. Kart Racing is native: compose world.racetrack + vehicle.driveable + race.kart; edit race_tracks through project data. world.lighting adds shared sun/fill, point lights and spots, presets, bounded light budgets and bloom; edit world_lights through project data. world.fluids adds interactive mud / blood surfaces, displaced 3D wheel ruts and footprints; edit fluid_surfaces through project data (web renderer). world.terrain adds a seeded large landscape (terrain_edits data), movement.traversal climbing / swimming / gliding with stamina, world.elements data-driven fire, water, ice, electricity and poison (element_rules, element_materials, element_climates data). Also returns packs: content packs (ready-made game content — documents and kit configs, e.g. a realistic atmosphere, a tree of life, a star system) that gripforge_gamekit_install { pack } installs into a project. Call this BEFORE gripforge_gamekit_install. 0 credits.ConnectorNo auth
- One address in the Minneapolis–St. Paul metro → what the public record says about that parcel, in one call: land use, build year, assessed value, last recorded sale, any MPCA contamination or storage-tank file, and the parcels that touch it with how many owners they have. Each field is a value or a miss WITH ITS REASON — 'the county records no build year' — never a blank. Free, no account, nothing stored. Use it the moment an address comes up; then twin_cities_records for the surrounding market. Example invocations: - "What do you know about 1420 Grand Ave, Saint Paul?" - "Is there anything on file for the building at 2900 Lyndale Ave S?"ConnectorNo auth
- Lists the public-records datasets Brick & Mortar publishes for the seven-county Minneapolis-St. Paul metro, with real row counts, column names, the filtered cuts available, and the counties each one actually covers. Free, no account. Call this FIRST to learn what can be answered, then call twin_cities_records to ask it. These are joined county and federal records — parcels and lot lines, recorded sale prices, owners, rental licences, contamination files, business counts by trade, census tracts. Example invocations: - "What Twin Cities property data do you have access to?" - "Is there anything on contamination or storage tanks in Minneapolis?" - "What columns are in the recorded-sales dataset?"ConnectorNo auth
- Returns a research framework, not the finished analysis: the procedure, output schema and quality rubric for a structured teardown of ONE named small business — digital presence, review signal, competitive position, pricing posture, visibility gaps, and prioritized, evidence-cited recommendations. Start here for any single-business question.. This tool fetches no data; the calling model runs the procedure with its own web search and produces the result. Example invocations: - "Run a teardown of Mucci's Italian in Saint Paul, MN" - "Tear down The Gray Duck Tavern (bar) in Minneapolis and tell me what's actually broken" - "I'm thinking about buying Sunrise Nails in Denver, CO — give me a teardown before I look deeper"ConnectorNo auth
- Returns a research framework, not the finished analysis: the procedure, output schema and quality rubric for mining public reviews for signal — a complaint taxonomy, theme extraction, sentiment trajectory over time, the differentiators customers actually cite, and red flags for a buyer. It does not read any review itself.. This tool fetches no data; the calling model runs the procedure with its own web search and produces the result. Example invocations: - "Mine the reviews for Al's Breakfast in Minneapolis for real patterns, not just a star rating" - "Perfect Image Salon in Wichita has a 4.6 average — check whether that's stable or masking a bad last 90 days" - "I'm evaluating The Anchor Room (bar) in Saint Paul, MN as a buyer — what do the reviews show about staffing turnover or an ownership change that the rating alone doesn't?"ConnectorNo auth
- Returns a research framework, not the finished audit: a scored checklist of what to check in a business's local search presence — map-pack factors, listing consistency, category selection, site fundamentals — and in what order. This tool reads no listing; the calling model runs the checks with its own web search. Example invocations: - "Run a local visibility audit on Fern & Fig Nail Bar in Cedar Rapids, IA" - "Why doesn't Steel Toe Brewing show up when someone searches 'brewery near me' in Louisville?" - "Give me a scored GBP/NAP checklist for a hair salon in Aurora, CO before I redo their listing"ConnectorNo auth
- Returns a research framework, not the finished analysis: the procedure, output schema and quality rubric for a gap analysis of a category x metro — how to tell underserved demand, oversaturation and genuine whitespace apart using only public signals, for someone deciding whether/where to open, expand, or invest.. This tool fetches no data; the calling model runs the procedure with its own web search and produces the result. Example invocations: - "Is there whitespace for a new brewery taproom in the North Loop, Minneapolis?" - "Scan the nail salon market in Aurora, CO for underserved demand" - "Where in Wichita, KS is full-service restaurant demand outrunning supply?"ConnectorNo auth
- Journey — while composing. A kit installed and left empty is not done (audio.core without a sound, ui.endscreen without an end condition): gripforge_game_audit names them. Add a gameplay kit (a brick) to a Game Kit project (gkp_…); installing marks that the game uses it. Decide it yourself, no confirmation needed. Always the latest version; dependencies are added automatically and listed in added [{ kit, version, requiredBy, capability }] (e.g. game.engine for a kit that requires it). A kit that looks with the mouse (first person, third person, shooters, vehicles, mounts) also brings its companion input.pointer_lock (mouse capture) the first time it is added — listed in added with reason "companion of …"; keep it unless the user wants the cursor visible (remove it alone with gripforge_gamekit_remove), and never code requestPointerLock by hand. Kits are bricks that go together: two kits handling the same thing (e.g. two lightings) are a same-scene overlap, never a game-level conflict — only one is active in a scene. Returns { plan, applied, added, project }; dry_run=true previews without writing. Check gripforge_gamekit_installed first, then gripforge_gamekit_search; tune with gripforge_gamekit_configure. To adapt a kit to the game, go through its extension points first — its configuration, its overridable collections, rules and scripts on its events, hooks documents on the hooks it declares (engine.hooks) — and recode or copy a kit only as a last resort, saying why: a copy is no longer updated. Legacy genre kits (legacy.*) use gripforge_kit. 0 credits.ConnectorNo auth
- The front door of brickandmortar.dev, as a tool. The platform is organised by WHO YOU ARE — an SBA lender, a business buyer, a landlord, a contractor, a journalist, a site selector, an appraiser, a city planner, 18 roles — and each role has a shelf of cards: joined public-records datasets for the Minneapolis–St. Paul metro, tools that read a file you bring against those records, a one-address lookup, and fixed-fee engagements where a person reads the record for you. Call with no arguments to see the roles; call with `role` to get that shelf, each card tagged with which tool on this server answers it. Call this FIRST when someone says what they do, or asks what we can do for them. Ask what they do if they have not said — the shelf depends on it. Everything free here is free with no account. Example invocations: - "I'm an SBA lender in Minneapolis — what do you have?" - "What can this do for a landlord?" - "Show me the shelf for a business buyer."ConnectorNo auth
- Returns a research framework, not the finished analysis: the procedure, output schema and quality rubric for assembling results already in the conversation into one client-ready report — section order, executive-summary rules, evidence-citation standards, and tone guidance matched to the audience. The calling model writes the report; this tool returns only the structure.. This tool fetches no data; the calling model runs the procedure with its own web search and produces the result. Example invocations: - "I've run a teardown and a review-intelligence pass on this restaurant — compose it into a report for the owner" - "Assemble everything we've found on this brewery into a broker-facing diligence report" - "Turn the teardown and competitor landscape into a report I can hand an investor"ConnectorNo auth
- Reads a document the person has — a P&L, a lease, a comp set, a schedule of locations, a member list, a story's addresses, a single claim — against the Minneapolis–St. Paul public record, and returns a table that cites the file behind every cell. This is the half of the platform the public record cannot do alone: their private file, our joined records, one answer. Free, no account. The document is read in the request, answered, and dropped — nothing is stored on either side. Get the slug and what to bring from what_we_have_for_you (cards with api_tool=true list `bring`). Pass the text exactly as they gave it; do not summarise a P&L before sending it. Tell them in one line what was sent and that it was not kept. Example invocations: - "Here's the P&L the seller sent — what does this business actually earn?" → tool 'pl' - "Grade my comps against the county's own sales" → tool 'compgrade' - "Check this line in my story: 'the building sold for $4.2M in March'" → tool 'claim-check', `claim`ConnectorNo auth