Skip to main content
Glama
728,529 tools. Updated 2026-10-31 11:31

"Server Fault" matching MCP tools:

  • Runs one read-only SQL query across datasets, for analysis the per-dataset filters cannot express, such as joining education, Census, or immigration figures to a lookup table or to each other on shared geography (immigration and county-level Census data share county_fips). The dialect is DuckDB SQL (https://duckdb.org/docs/sql/introduction). Allowed: one SELECT (or WITH ... SELECT) that names only the tables link_tables lists, by their `table` names (FROM education.attendance a JOIN dimensions.districts d ON a.district_code = d.district_code; without an alias a table is referenced by its bare name, 'attendance'); no DDL, DML, COPY, ATTACH, INSTALL, PRAGMA, SET, or CALL, and no read_parquet(), other file readers, or file paths. Joins use the keys from describe_dimension's link_keys (districts.district_census_id reaches Census data through the crosswalk; it is a school-district code, not a county FIPS code, and a district is not the same as a county). Results are capped by rows, bytes, and time; `truncated` says a cap was hit, and grouping or a tighter WHERE fits more. NULL means suppressed, not zero. A rejected query returns an error naming the token or table at fault, with the closest table names.
    ConnectorNo auth
  • Keyword Research (marketplace term universe): search the FULL Top Search Terms store by phrase - not anchored to any ASIN. Filters: contains (up to 5 substrings, ANDed), department, rank_max, min_volume; period WEEK or MONTH (MONTH = monthly volumes); sort rank | volume | trend. Each term: search_frequency_rank, volume (amazon_sqp = TRUE Amazon volume where any account's SQP covers the term; estimated_from_rank with volume_band otherwise), rank_change vs ~4 periods back, and the top-3 clicked ASINs with click/conversion shares (the term's competitive landscape). The estimator block reports calibration health (pairs, typical error factor, band coverage). Use keyword_finder for ASIN-anchored lookups; this tool for term-first research. For the guided process start with keyword_opportunities.
    ConnectorOAuth
  • Stage a dayparting mutation: action=create|update|delete|toggle|clone|assign|unassign. Stages a proposal — NOTHING changes until confirm_staged_changes (reads live in automation_dayparting). create/update take params (name, schedule_type bid|budget, hour_matrix = {sun..sat: [24 values]} or a 7x24 grid Sunday first, each value a % of the base bid: 100 = no change, 80 = bids at 80%, 0 = pause). A schedule does NOTHING until campaigns are assigned, so create should also carry params.entities [{entity_type: campaign, entity_id, name?, base_value?}]; assign takes the same list; mutations take schedule_id.
    ConnectorOAuth
  • Use this when the user asks about a specific Model Context Protocol server — whether it is listed in the official MCP registry, what endpoint it publishes, how current its listing is, or whether that endpoint responds. Returns the registry record (name, version, publish and update dates, declared remote endpoints, registry status) plus the result of one anonymous request to a registry-published endpoint. Reports observations only. It does NOT assess whether a server is safe, trustworthy, well-built or suitable — we cannot see what a server does with data, and reachability is not safety. Many listed servers require authentication and cannot be queried anonymously; that is normal and is not a fault. Absence from the registry is not evidence a server does not exist. Not for: security assessment, recommending which MCP server to install, or checking AI tools in the RightAIChoice catalog (use check_tool_status).
    ConnectorNo auth
  • Use this when the user asks about a specific Model Context Protocol server — whether it is listed in the official MCP registry, what endpoint it publishes, how current its listing is, or whether that endpoint responds. Returns the registry record (name, version, publish and update dates, declared remote endpoints, registry status) plus the result of one anonymous request to a registry-published endpoint. Reports observations only. It does NOT assess whether a server is safe, trustworthy, well-built or suitable — we cannot see what a server does with data, and reachability is not safety. Many listed servers require authentication and cannot be queried anonymously; that is normal and is not a fault. Absence from the registry is not evidence a server does not exist. Not for: security assessment, recommending which MCP server to install, or checking AI tools in the RightAIChoice catalog (use check_tool_status).
    ConnectorNo auth
  • Video Director render: action=start (projectId, expectedRevision, idempotencyKey, kind=frame|contact|preview|export, startFrame, endFrame) returns a job to poll with video_jobs. An export always covers the whole project; to test a range, render kind=preview with startFrame/endFrame. A job only succeeds when the video stream itself holds every planned frame, and result.duration is probed from the file. cancel (jobId); retry (projectId, expectedRevision, idempotencyKey, jobId). Renders happen on the private engine; the MP4 is downloaded from AMZ Vault, never published anywhere. Video Director is in BETA (2026-10-18): open to every AMZ Vault account; free video accounts get 3 badged 720p exports, trials 2 clean exports a day, subscribers unlimited. Call video_guide first for the catalog, the exact input schema of each action and this account's tier notes.
    ConnectorOAuth

Matching MCP Servers

Matching MCP Connectors

  • Use this when the user asks whether a DNS change has landed, wants a DNS record looked up, or wants to verify a record they just published — or whenever answering needs the live value of a record. Reads the record from the domain's OWN nameservers (cache-free) and from two public caching resolvers. `kind` is one of spf|dmarc|txt|mx|cname|a|aaaa — pass the kind, not a query name: `dmarc` reads TXT at _dmarc.<domain> and `spf` reads apex TXT, each filtered to the matching record. `host` prepends a label (txt, cname, a and aaaa only). Pass `expected_value` when checking an edit. Relay `verdict`: done (the nameservers serve it and both caches agree), wait (served, caches catching up — check again after check_again_after_seconds), edit (the domain's nameservers do not serve it; `found_at` names where the value was seen instead, if anywhere). not_registered: true means the domain does not exist (usually a typo). An error starting cant_tell is a lookup fault, never evidence the record is missing. Two resolvers is the whole sample, so never describe this as worldwide or as propagation coverage.
    ConnectorNo auth
  • Fail one compute/Kubernetes node, database, or cache in a temporary anonymous demo simulation (marked critical, not removed). Targeted database quick failures are bounded and reversible; with no serving database at positive load, simulation.step reports 100% errors, zero goodput and errorBreakdown.dbFailure: 100. simulation.recover_resource can restore a database or cache early. An AWS Aurora writer with characteristics.auroraStandbyResourceId pointing to a healthy related replicaOf database has an opt-in modeled failover: the first step is unavailable, the second shows the standby serving without a residual writer-outage penalty. MultiAz or an unrelated second database alone does not establish a standby. Read metrics.databases[].auroraFailover and the promotion event for the failed and standby IDs and success, plus errorRate and throughput. Each quick step is one modeled simulation second, so second-step promotion is one second after injection. Chaos database_crash samples every 10 seconds and defaults to a 30-second promotion and a 1800-second sole-writer restart after its injection duration; compare matching phases, not equal step indices or wall-clock times. These are deterministic assumptions, not observed AWS behavior. No API key required for this temporary anonymous demo operation. Exact targeting: pass resourceName (human-readable name, e.g. 'app-server-01'; exact match preferred, an unambiguous prefix is accepted) or resourceId to fail a specific resource — including an individual named instance, not only a group. If resourceName matches multiple resources the call fails with a 400 listing every matching candidate by name — retry with one exact name (or its resourceId) from that list. The database or cache must be healthy; an already failed database or cache returns a 400 describing its current status. When neither parameter is supplied, a RANDOM healthy compute/Kubernetes node is selected (not a database) — this path is non-deterministic and NOT suitable for controlled scenarios or replay; always target by name/id when reproducing a precise fault sequence. For a GKE cluster, optionally provide nodePoolId (declared pool id or stable generated pool id) or nodePoolName (exact pool name) with resourceId/resourceName to choose which pool loses one worker. Unknown or ambiguous selectors return a 400 with candidate pool IDs/names. The injection event and each step's metrics.kubernetes row include the selected pool and its configured, available, and unavailable node counts; omitting the selector keeps the seeded pool choice. The response always echoes the applied outcome via resolvedResourceId, resolvedResourceName, and previousHealth (populated from the selected resource on the random path too). Network, storage, queue, and security resource types are not supported by quick injection. Cache failures are supported and recoverable with simulation.recover_resource. For typed database_overload use authenticated failure.create (unavailable anonymously); instance_kill PERMANENTLY removes the instance — failure.delete does not restore it; use instance_down instead for a reversible single-node outage. Returns the updated resource list and the failure event that was logged. The likely next tool is simulation.step to observe how the architecture degrades under failure, then simulation.metrics to review the health impact. Do not use it to advance simulation time — that is simulation.step. Pass simulationId from simulation.create when this call is made from a fresh MCP session; otherwise you may omit it to target the current simulation in the preserved MCP session. Authenticate with an API key to unlock all 67 tools including typed durational failures and chaos engineering.
    Connector
    Destructive
    No auth
  • [RETRIEVAL / READ] Fetch one public MisakaNet lesson by repository path or lesson ID. Use after misakanet_search returns a promising result to pull the full fix content. Provide exactly one of id or path (path takes precedence if both are supplied); if neither is supplied the tool returns {error}. `path` must be a lesson file (lessons/<topic>/<slug>.md) — anything else is refused with code=invalid_lesson_path rather than read. Returns: object {path: string, content: string} — lesson markdown body, capped at 5000 chars per call; or {error, code}. The code says which: lesson_not_found (no such lesson — do not retry, search instead), invalid_lesson_path (the argument is not a lesson reference — fix the argument), internal_error (a service fault — retrying is reasonable). When the lesson is longer than the cap the response says so instead of pretending to be complete: {truncated: true, content_length: <full chars>, content_returned: <chars here>, full_content_url: <raw markdown>} — fetch that URL when the tail matters (the cut can fall before the Verification section). Example: misakanet_get_lesson(id='auto-merge-ci-pipeline')
    ConnectorNo auth
  • Land one smack on the current boss and return the damage dealt and the remaining hit points. One swing per call — call it repeatedly to keep hitting. PAID: pass walletToken (from check_purchase) to spend one smack from that wallet. Paid hits are the real thing — they can crit, they take the momentum multiplier, and only a paid hit can land the killing blow and put a name on the grave forever. FREE: pass visitorId instead and it costs nothing. Three per visitorId — the count is held for about thirty days — then FREE_EXHAUSTED, which is the limit working and not a fault. It is NOT an hourly allowance: waiting does not give them back. A free smack can never land the killing blow and free damage is capped per boss, so the engraving stays with somebody who paid for it. Pass one or the other. If both arrive, the wallet is spent.
    ConnectorNo auth
  • Propose adding negative keywords / negative ASIN targets. Items: campaign_id + keyword_text (SP/SB) or asin_target (SP/SD) or brand_id (SD). Levels: SP campaign or ad_group (pass ad_group_id); SB and SD are AD-GROUP level — ad_group_id required (SB is keyword-only, SD is product/brand-only). match_type: NEGATIVE_EXACT (default) | NEGATIVE_PHRASE | NEGATIVE_BROAD — any casing (negativeExact, exact) is accepted and normalized to the correct per-API wire form; SB has no broad. STAGING ONLY: saves a reviewable diff in AMZ Vault — NOTHING is sent to Amazon until confirm_staged_changes is called.
    ConnectorOAuth
  • EXECUTE a pending proposal — call ONLY after you have rendered the full diff to the user as text (entities by name, current → proposed, reason) and they agreed. approved_summary must restate what they approved; it appears in the client's permission prompt, so a bare proposal_id is never shown alone. PARTIAL approval: when the user wants only SOME items, pass the rest as excluded_refs — same behavior as the dashboard's per-item checkboxes. Single-use. Expiry: 60 minutes for chat-staged proposals, 72 hours for workforce-staged ones - the proposal's own expires_at is authoritative.
    Connector
    Destructive
    OAuth
  • Search raw NetFlow records (per-flow, not aggregated). Wraps GET /api/netflow/list (permission: vne). HORIZON — read this before choosing a window: the raw table holds only about 15 MINUTES. cleanup_netflow (pg_cron, every 15 min) rolls flows into agg_netflow and DELETEs every netflow row whose end_time is older than 15 minutes. `hours` accepts 1-168, but no data older than that horizon exists to match, so a 24-hour request coming back empty is the expected outcome, not a fault. For anything beyond the last few minutes use netflow_search (the aggregated view). Within the horizon this is the drill-down: when netflow_search shows that 10.0.0.5 sent a lot of bytes to 8.8.8.8, this tool returns the actual flow rows, with the per-flow packet counts, scalar src_port and exact timing that the rollup discards. (vlan and the iface columns survive the rollup — netflow_search filters on those too.) IP / port filters: `src_ip`, `dst_ip`, `src_port` and `dst_port` are each STRICT equality on that one column and NEVER match the opposite side. Use the compound `ip` (src_ip OR dst_ip) or `port` (src_port OR dst_port) when you don't know which side the host or service was on — reaching for src_ip instead silently drops every flow where the host was the destination. Passing both src_ip and dst_ip ANDs them into a single direction. Window: `hours` (1-168, default 24) OR `start_time`+`end_time` (ISO-8601 UTC), matched by OVERLAP (start_time < end AND end_time > start) — any flow ACTIVE during the window matches, including flows straddling either edge and live flows whose end_time is padded a little into the future. `limit` defaults to 50 (max 500). Tag-scoped server-side on the conversation ENDPOINTS — src_ip / dst_ip against the caller's in-tag device IPs, not flow_src. Example: netflow_raw_search({ip: '10.0.0.5', dst_port: 443, hours: 1})
    ConnectorNo auth
  • Fallback for clients that cannot download and query the source locally. Use only when local execution is unavailable or the user explicitly asks for Aard-managed staging. Never fetch the URL with web search or request its response body directly. Stage the exact unchanged fallback URL outside model context; this tool returns metadata only. Use its dataset_id with inspect_dataset or query_dataset. The URL alone is sufficient. download_ref is an optional fast path — if you cannot copy it exactly, OMIT it rather than risk mistyping it; the server then re-derives the grant itself and the call still succeeds. no_records_for_selection is TERMINAL, not a fault: the request was well-formed and the source holds no observations for it. Widen the selection or state that no data exists — do not retry the same selection.
    ConnectorOAuth
  • Purpose: generate instant, itemized quote estimates from the carriers Foresee supports, across the lines and states Foresee currently serves, in one call — the LIVE TODAY line at the end of this description names today's set. `lines` is REQUIRED and is ONE map: each key names a line to price (e.g. "auto", "renters", "home" — plain words are fine), each value is that line's coverage ask as actual numbers. A line Foresee doesn't quote in the user's state comes back under `skipped`: `lines` names each one and `message` is one sentence, written to be relayed to the user as-is, naming what Foresee does quote in that state. For auto the ask has four axes — `bi` (bodily-injury liability, per-person/ per-accident in $000s, e.g. "100/300"), `pd` (property-damage liability in $000s, e.g. 100), `coll_deductible` (collision deductible in dollars, e.g. 500) and `comp_deductible` (comprehensive deductible in dollars, e.g. 500); `um` and `medpay` are optional. A renters ask has four axes — `coverage_c` (personal-property/contents limit in dollars, e.g. 30000), `coverage_e` (personal liability in dollars, e.g. 100000), `coverage_f` (guest medical in dollars, e.g. 1000) and `deductible` (all-perils, in dollars, e.g. 500); `coverage_d` is optional. A home ask: `coverage_a` (the dwelling's replacement cost in dollars), `coverage_e` (e.g. 300000), `coverage_f` (e.g. 1000) and `aop_deductible` (all-other-perils deductible in dollars, e.g. 1000). There are no named coverage levels and the server never defaults: pass exact numbers. An omitted OPTIONAL axis (`um`, `medpay`, `coverage_d`) keeps each carrier's own default — the quote's per-coverage lines show what was rated. Any numbers at or above the state's legal minimum work as the ask (an auto `bi`/`pd` below it prices nothing — no carrier may sell that policy — and comes back under `coverage_required` naming the minimum); each carrier's `price_ladder` prices every other rung, so a starting selection is easy to refine after the fact. An incomplete ask on a live line prices nothing and answers with `coverage_required` naming that line's own axes; an axis supplied with a value no carrier offers (`bi` "banana", a negative deductible) is refused the same way, naming the bad value and the format the axis takes. Each supported carrier is priced at the selection given; a carrier that doesn't offer an asked rung is priced at its nearest offered one and says so: its entry carries `rated_vs_asked` (per axis: `asked`, `rated`, and `coverage` "less"/"more" than asked; the dense text puts it on the `C` row as `rated`). That price is NOT like-for-like — state the rated limits next to it every time you show it (e.g. "$255/mo — 30/60 BI / $25k PD, the most this carrier offers, not the 100/300 / $100k you asked for"), and never let it headline or anchor a cheapest/spread claim without saying so. A carrier Foresee can't price appears in `failures` with the reason, as does one Foresee can't price for a line it was asked on (no program served there yet, or the carrier doesn't sell that line in the state) — a carrier never silently vanishes from a line's results. Priced results come back per line under `by_line`. Profile requirements: ZIP code, age (or dob) and — for auto — each vehicle's year/make/model are REQUIRED; they have no server-side fallback. A missing or mistyped one errors at the schema with guidance; a value that fits the schema but cannot rate ("not-a-zip", a negative age) comes back in `profile_required` naming it, with guidance on what the field takes. Use the profile schema's exact field names: a key the schema doesn't name is carried but never rated. A complete call — a 25-year-old in Oakland with a 2021 Civic, a January 2025 speeding ticket and a 2023 at-fault accident, asking for 100/300 BI, $100k PD and $500 collision/comprehensive deductibles: {"profile": {"zip_code": "94621", "age": 25, "auto": {"drivers": [{"violations": [{"on": "2025-01", "kind": "speeding"}], "accidents": [{"on": "2023-06-15", "at_fault": true, "amount": 4200}]}], "vehicles": [{"year": 2021, "make": "Honda", "model": "Civic"}]}}, "lines": {"auto": {"bi": "100/300", "pd": 100, "coll_deductible": 500, "comp_deductible": 500}}} Every violation needs `kind` and `on`, every accident `on`; an incomplete entry is refused naming its path, never assumed away. Each carrier returns a **point estimate** (`monthly`) plus a `confidence_interval` that reflects only what's genuinely unresolvable (irreducible), NOT missing profile fields. A field the caller omits is filled with ONE declared value and reported in `assumptions` / `tighten_by` (the reducible "tell us X and we sharpen" gap) — the response is built to be presented early and refined, never widened into a vague range. Each entry's `field` is the exact profile path to send the user's real answer under (e.g. `auto.drivers[].violations`), and `tighten_by` lists those same paths. The one exception is `incident_details`: it is answered by completing the incident entries already sent (dates, fault, BI split), not under a fresh key. Each carrier's `quote` carries every sub-coverage line (BI/PD/collision/ comprehensive/UM…) with its monthly price, at the selection you passed (echoed as `coverage_selection`). Most carriers also carry a `price_ladder`: for each coverage lever of the line (auto: BI limit, PD limit, collision/comprehensive deductible; renters: deductible and the C/E/F limits; home: AOP deductible and the A/E/F limits) the exact price at every rung, one lever moved at a time with everything else held at the user's selection — the ladder is anchored at the selection you passed, so its `anchor.monthly` is the carrier's `monthly`. It answers limit/deductible what-ifs with real marginal prices. Every ladder number IS an exact re-rate; a combined change or an unlisted rung has no derivable price (rating is not linear), so those price only through a re-call with the new `coverage_selection`. A profile what-if (a cleaner record, another vehicle, a different ZIP) prices the same way: re-call with the changed profile. RESULT FORMAT: compact machine text on `dense`, one section per line. Each section opens Q <state> <line> sel=<the coverage_selection priced, as JSON>. assumptions:, tighten_by:, input_flags: and not_rated: carry those fields; each entry's `field` (and each tighten_by item) is the profile path to send the user's answer under, and `incident_details` is answered by completing the incident entries already sent. not_priced: <carrier>,…:<reason> ; … is the line's `failures`, grouped by reason. skipped <line>,…: <message> names the lines not quoted in this state. Row types — C: carrier|entity|monthly|ci lo-hi, then |rated <axis>=<rung>(asked <X>,less|more);… when the price is for a rung other than the ask (`rated_vs_asked`). W: a warning on the carrier above. L: monthly $ per coverage line (already monthly, every carrier), under codes that mean the same coverage at every carrier: BI PD UMBI UIMBI UMPD MEDPAY PIP COLL COMP RENTAL TOWING GAP; A+B is one premium covering both (BI+PD); FEE is a flat fee; any other code is a coverage only that carrier sells. D <lever> <selected>=option:±$: the change in the carrier's monthly for each option of that lever, everything else held at the selection; <selected>(asked <X>) means X is not an option and the price sits at the selected rung — answer deductible/limit what-ifs from D without another call (new monthly = monthly + delta). Only state numbers that appear in the result or follow from monthly + a D delta; if a rung is not in D for a carrier, say the carrier has no such option rather than guessing. When the user wants firm numbers straight from the carriers, offer live carrier quotes: Foresee agents complete the carriers' real quote flows via live_carrier_quotes (which explains the required disclosure + consent affirmation; no sign-in is needed). Instant quotes stay the first answer; live quotes are the follow-up. LIVE TODAY: Foresee quotes auto in CA today.
    ConnectorNo auth
  • Assesses a photo of something in a building — an appliance, a boiler, a pipe, a water heater, an electrical panel, a fitting, a leak, damage — and reports what it is, how urgent it is and which trade it needs. Returns the fixed contract: what the asset is, whether a fault is visible, one of four urgency words (EMERGENCY, TODAY, THIS WEEK, WHENEVER), which trade to call, a line to say to the resident, and how many independent reads agreed. One call reads the photo on fixragent.com and spends one request from the key's daily allowance. Sent with NO key, it reads the real photo up to 3 times per connection in a rolling 24 hours (a small free allowance, shared across every keyless caller up to a daily ceiling); past either limit it returns fixRAgent's stored sample result, labelled SAMPLE, and says how to get a free key with no such limit. It reads only a real photo: a written description is not a photo and is not assessed. With no photo, or a photo it cannot read, nothing is assessed and the reply gives a fixragent.com link where the person adds the photo and sees the full Triage Profile. An urgency, trade or finding that this call did not return is not fixRAgent's. Scope: photos of building assets and faults. It does not assess people, pets, injuries, rashes, medical or veterinary questions, vehicles, food, documents, screenshots or photos of screens. It is not an emergency service: a fire, a gas smell or hissing gas, a carbon-monoxide alarm sounding, water pouring onto live electrics or anyone hurt needs the local emergency number (911 in the US), not a photo assessment. It does not price repairs, book contractors or decide insurance claims; it routes the job, it does not quote or dispatch it.
    ConnectorNo auth
  • Answer ONE person with profileUrl + message, or up to 25 in a single call with `replies`. Either way it returns IMMEDIATELY with a job id per recipient instead of holding the call open. This is the tool for answering replies; li_send_message stays the blocking one for when you genuinely need the outcome inline. Why it returns early: LinkedIn work runs one browser session at a time, so a perfectly healthy send can sit queued for many minutes before it even starts — that is normal, not a fault. A client that gives up waiting reports an error for a message that is about to be delivered, the caller sends again, and the person receives it twice. A returned job id is NOT a failure and NOT a timeout: the message is queued and the worker will send it. NEVER call this again for the same recipient to "make sure". ⚠️ DO NOT VERIFY BY DEFAULT. Queued means it is going out; polling spends time on news that was never in doubt. Say it is queued and finish. Verify only when somebody ASKS whether it landed, or when something later suggests it did not: the surest sign is a person still in li_replies_to_answer an hour on, because a delivered reply leaves that queue by itself. Then it is ONE call — li_job_result with `jobIds` set to the ids this returned, plus `waitMs` if you genuinely need to wait inside that call. One call covers the whole batch however many accounts it spans; `stillRunning: 0` is how you know they have all landed. The array form queues ONE ORDINARY SEND PER PERSON rather than a single bulk run, which is why it cannot time out and why each reply is recoverable on its own. Each reply is delivered in its own browser session addressed to one profile URL, so no part of a batch can reach the wrong person. Every recipient is checked BEFORE anything is queued: if one is refused, nothing at all is queued, so you can drop that row and call again safely. ✅ A BATCH MAY SPAN ACCOUNTS. Leave the account unnamed and every reply is sent from the account whose conversation it actually is — so the queue from li_replies_to_answer can be answered exactly as it came back, in one call, however many accounts it covers. Each queued row reports the `accountId` that sent it, and the reply carries an `accounts` summary. Naming an account with sessionLabel still pins the WHOLE call to it, and any row whose conversation belongs elsewhere is then refused — use that when you mean it. Either way a row that cannot be placed (untracked, or on two of your own accounts) is refused BY NAME and nothing at all is queued, so you can drop it and call again safely. Answering someone from an account they never heard from is worse than answering them late.
    Connector
    Destructive
    OAuth
  • Reads a set of screenshots with the App Screenshot Index's own reader and holds it against a category: each screenshot comes back with the same tactic keys search_screenshots uses (with label and group), its words and its colour, and each notable tactic comes back with whether the set has it, which screenshots carry it, and what share of the category's top 100 apps, of its top ten and of the rest have it. Use it to turn "how does this set compare" from your reading of pictures into a measurement. Needs sign-in (generate scope). Say which set with one of: page_id (a page made here: its drawn screenshots, which is how you measure a new set), app_id (an app on the workspace: the screenshots of its listing as Pagefully holds them, which is the baseline, and works for an app that is not on the public App Store), or app_store_url or app_store_id (any public App Store app). Pictures cannot be handed to this tool: to measure a design, make the page with generate_pages and send its page_id. For the old set against the new, send the new set and put the old one in baseline, such as page_id with baseline { app_id }. The answer then has "changes": the tactics gained, dropped and kept, each with the screenshots that carried it before and after and the category's numbers, so nothing has to be worked out by eye. The category is the app's own unless you name one with category (a slug from search_screenshots). Where the Index does not hold the app's category the screenshots are still tagged, with no comparison, and category_note says why. Reading costs, so it is metered: a picture is read once and kept, and a workspace can have 60 new screenshots read a day, 10 for a set at most. If any screenshot has not been read yet the answer is a job_id and no tags: call get_job until it is done, then call score_screenshots again with the same arguments. A set read before answers at once. Do not call it in a loop, and after edit_page score a page again only when the person wants the new measurement. There is no score out of a hundred, on purpose. The numbers describe what the leading apps do. They do not show that a tactic causes installs or rank, so say "most top Finance apps do this and this set does not", never "adding this will raise installs". A tactic the set lacks is an observation for the person to weigh, not a fault to fix unasked. Another app's words and name never go into a page.
    ConnectorNo auth
  • Send R3 a bug report about R3 ITSELF (the engine, the editor, these tools), in the user's name and naming you (your agent key or app connection). It becomes one of the user's support issues, which only the user and R3's team see. Use it when R3 does something its documentation says it should not, after checking the docs (r3_docs_read) — not for problems in the user's own project, and not for feature wishes (those are r3_roadmap_suggest). r3_bug_reports_mine lists what the user already reported, so a fault is not filed twice. A useful report says what was done (the tool calls), what was expected and what happened, with what was MEASURED in `measurements` — the values read back with r3_component_read or r3_editor_inspect, the exact error text. `projectId` (when it happens in a project) lets R3 open it. The answer carries the report's link for the user. Rate-limited per agent key or app connection (a few an hour). Needs the support:write right.
    ConnectorNo auth
  • Estimate the heat pump a UK house needs, and what it would cost to run against the fuel it burns now. IMPORTANT: MIS 3005-D requires a heat pump to be sized from a room-by-room heat loss calculation to BS EN 12831, and nothing here replaces that. Say so whenever you report a result from this, and point the user at the room-by-room calculation. What the figure is for is checking whether a size somebody has been quoted is plausible, because oversizing is the commonest fault in heat pump installations and it is invisible to the person living with it. There are two routes and the first is much the better one. From metered fuel, which is preferred: give 'annualFuelUse' from a year of bills. The fuel becomes heat delivered, hot water comes off it using the MIS 3005-D formula, and what remains divided by the local heating degree days gives the building's heat loss coefficient in watts per kelvin. Degree days are computed from the Met Office monthly means published in MGD 007 section 5. From the fabric, as a fallback when there are no bills: give 'floorAreaM2', an 'insulation' level and a 'propertyType'. The watts per kelvin per square metre behind this are a reasonable reading of British housing stock but they are NOT MCS figures, because MCS publishes no such shortcut. Say so when using this route. Either way the peak load is the coefficient multiplied by the design temperature difference for the location, from Table 2 of MIS 3005-D. The heat pump must deliver at least that at the design outside temperature and the design flow temperature, which is not the same as its headline rating. The result also compares what each of four flow temperatures would cost to run, which is the decision that governs the bill and the one a quotation most often leaves unstated. Supply 'quotedHeatPumpKw' to have a quoted size checked against the estimate. Method from MIS 3005-D. These calculators follow the published MCS methods, for understanding a system and checking a quotation. Anything that gets installed still needs a design and a site survey from a certified installer.
    ConnectorNo auth
  • Estimate the heat pump a UK house needs, and what it would cost to run against the fuel it burns now. IMPORTANT: MIS 3005-D requires a heat pump to be sized from a room-by-room heat loss calculation to BS EN 12831, and nothing here replaces that. Say so whenever you report a result from this, and point the user at the room-by-room calculation. What the figure is for is checking whether a size somebody has been quoted is plausible, because oversizing is the commonest fault in heat pump installations and it is invisible to the person living with it. There are two routes and the first is much the better one. From metered fuel, which is preferred: give 'annualFuelUse' from a year of bills. The fuel becomes heat delivered, hot water comes off it using the MIS 3005-D formula, and what remains divided by the local heating degree days gives the building's heat loss coefficient in watts per kelvin. Degree days are computed from the Met Office monthly means published in MGD 007 section 5. From the fabric, as a fallback when there are no bills: give 'floorAreaM2', an 'insulation' level and a 'propertyType'. The watts per kelvin per square metre behind this are a reasonable reading of British housing stock but they are NOT MCS figures, because MCS publishes no such shortcut. Say so when using this route. Either way the peak load is the coefficient multiplied by the design temperature difference for the location, from Table 2 of MIS 3005-D. The heat pump must deliver at least that at the design outside temperature and the design flow temperature, which is not the same as its headline rating. The result also compares what each of four flow temperatures would cost to run, which is the decision that governs the bill and the one a quotation most often leaves unstated. Supply 'quotedHeatPumpKw' to have a quoted size checked against the estimate. Method from MIS 3005-D. These calculators follow the published MCS methods, for understanding a system and checking a quotation. Anything that gets installed still needs a design and a site survey from a certified installer.
    ConnectorNo auth