Skip to main content
Glama
649,985 tools. Updated 2026-10-10 19:04

"Express" matching MCP tools:

  • 业绩快报(财务数据) 需要 PRO 及以上套餐(低档位调用返回 403)。 Args: symbol: 证券代码(带后缀),如 000001.SZ start_date: 起始日期 YYYYMMDD end_date: 结束日期 YYYYMMDD period: 报告期 YYYYMMDD(如 20251231 = 2025 年报) Returns: JSON 数组;字段: symbol, ann_date, end_date, revenue, operate_profit, total_profit, n_income, total_assets, total_hldr_eqy_exc_min_int, diluted_eps, diluted_roe, yoy_net_profit, bps, perf_summary, update_flag
    ConnectorNo auth
  • Calculates chargeable (billable) weight -- frachtpflichtiges Gewicht, Frachtgewicht -- for a freight shipment (Stückgut or Sammelgut) from a list of cargo pieces, for one of four transport modes. Answers questions like "wie viel wiegt die Sendung frachtpflichtig" or "was ist das Volumengewicht". For each mode, chargeable weight is the greater of the actual (scale) weight and the volumetric weight (Volumengewicht), where volumetric weight is derived from total volume using a mode-specific default divisor (overridable via volumetric_divisor): - air (Luftfracht): volume_cm3 / 6000 (IATA standard, 167 kg/m3) - courier: volume_cm3 / 5000 (common express-carrier convention, e.g. DHL/FedEx/UPS) - road: volume_m3 * 333 (simple volumetric "1:3" convention; does not model Lademeter/LDM-based road pricing -- for loading-metre, Stellplätze, or vehicle-fit questions, use calculate_loading_metres and check_truck_fit instead, both on this server) - sea_lcl (Seefracht): volume_m3 * 1000 (W/M -- weight or measurement, 1 revenue tonne per m3) Worked example: 2 pieces, 60x40x50cm, 45 kg each, air mode -> total actual weight 90 kg, total volume 0.24 m3, volumetric weight 40 kg (240,000 cm3 / 6000) -> chargeable weight 90 kg (actual weight governs, since it exceeds the volumetric weight). Rounding: air and courier chargeable/volumetric weight round UP to the nearest 0.5 kg (chargeable_weight_raw_kg gives the unrounded value, chargeable_weight_kg the rounded one). Road and sea_lcl are not rounded up, just reported to 1 decimal place. Edge cases: missing or invalid mode, more than 100 pieces, or any non-positive dimension/weight/quantity returns a clear, structured explanation rather than an error stack -- never a guessed default mode or divisor. Returns total actual weight, total volume, volumetric weight, raw and rounded chargeable weight, which one governs, the divisor used, and a one-line human-readable summary.
    ConnectorNo auth
  • Apply a list of structured edit ops to an existing Mermaid `source` and return the edited diagram. This is the declarative counterpart to `execute`: plain JSON in, plain JSON out, no sandbox. Prefer it for straightforward edits; reserve `execute` for logic the ops don't express. Returns { ok, family, source, verify:{ ok, warnings } } on success, or { ok:false, family, opIndex, error } — where `error` names the offending field and lists the valid ones — when an op is malformed or cannot apply. Ops apply in order and are all-or-nothing: the first failing op stops the batch (its position is `opIndex`) and the input is left untouched. Each op is { "kind": <op>, …fields }. Call `describe_sdk` for the detected family before authoring unfamiliar ops; it returns compact signatures or exact field types, enum values, defaults, and constraints.
    ConnectorNo auth
  • Execute a read-only QuerySQL SELECT against the observability data. QuerySQL is standard SQL (MySQL-compatible syntax, backtick-quoted identifiers) over your own telemetry. Write normal SQL — most standard features work: WHERE, GROUP BY, HAVING, ORDER BY, LIMIT, DISTINCT, CASE WHEN, LIKE, ILIKE, BETWEEN, IN, !=, <>, IS NULL, IS NOT NULL, NOT, OR, AND, subqueries, derived tables, JOINs, aliases, COALESCE, IF. Also =~ 'pattern' (case-insensitive match, * wildcard); = / != with a *-wildcard string value behave as ILIKE / NOT ILIKE. Free-text search: matches('text') in WHERE searches the message, all attributes, and service case-insensitively (substring match; trace/span ids by exact match), e.g. SELECT * FROM logs WHERE matches('connection refused'). Call describe_schema first to discover available fields and dynamic attributes for your data. Sources: logs, spans, metrics. Dynamic attributes are queryable directly by name, dots included: http.request.method. Resource attributes need the resource. prefix: resource.service.name (logs and spans only; metrics does not expose resource attributes). Missing attributes read as NULL. Common fields per source: logs: timestamp, service, level, message, trace_id, span_id, parent_span_id, source_instance_id, log_id spans: timestamp, service, name, kind, status_code, status_message, trace_id, span_id, parent_span_id, source_instance_id, duration_ms metrics: metric_name, service, source_instance_id, timestamp, value Custom functions: count(), count(DISTINCT field), countIf(condition), countIf(DISTINCT field, condition), sum(field), avg(field), min(field), max(field), p50(field), p95(field), p99(field), contains(field, 'text') (case-insensitive substring match), error_rate() (percentage, 0-100), request_count(), error_burn_rate(budget), latency_burn_rate(field, threshold, budget), bucket(field, 'interval'), now(), regexp_extract(field, 'pattern' [, group]), lag(field) OVER (PARTITION BY ... ORDER BY ...). bucket(timestamp, '5m') groups by time. Intervals: <number><unit> with unit m, h, or d (e.g. 1m, 5m, 30m, 1h, 6h, 1d). For a query that selects a single aliased bucket, groups by it alone, orders by it, and has no LIMIT, empty buckets are zero-filled in the response (numeric columns 0, others null): interior gaps always, and out to the statement's literal timestamp bounds when it has them (to now when it has only a lower bound), so a series that stopped ends in zeros rather than on its last non-zero bucket. Other query shapes still return only non-empty buckets. DISTINCT is a modifier on the counting aggregates: count(DISTINCT field) counts distinct values, countIf(DISTINCT field, condition) counts the distinct values of the rows matching the condition. DISTINCT inside any other aggregate (sum, avg, p95, ...) is rejected with an error rather than ignored. regexp_extract returns the first regex match (or capture group if specified). Returns null on no match. Example: regexp_extract(message, 'status=(\d+)', 1). Burn-rate rules (declared SLO): error_burn_rate(budget) is the error share divided by your budget (0.001 = 99.9% SLO); latency_burn_rate(duration_ms, 500, 0.03) is the share of requests over 500ms divided by a 3% budget. Alert when the result exceeds a burn multiple (e.g. GT 6 over a 60-minute window). Metrics aggregation: a metric row carries one reading in its value column, so aggregate it with the ordinary functions — avg(value) for a gauge, sum(value) only where each row is already a delta. There is no rate() or value() function: a cumulative counter's rate cannot be written as one aggregate, because an aggregate cannot wrap the window function the per-point delta needs. Spell it as a subquery instead: SELECT sum(delta) / 300 AS value FROM (SELECT value - lag(value) OVER (PARTITION BY service, source_instance_id, metric_name ORDER BY timestamp) AS delta FROM metrics WHERE metric_name = 'http.server.request.count') AS deltas WHERE delta >= 0 Replace 300 with your own window in seconds and the metric name with yours. The derived table has to be aliased (AS deltas) or the outer select has no source to resolve delta against. delta >= 0 drops counter restarts. The shape is correct only where the metric carries one series per service, source_instance_id and metric_name: when attributes split it into several series, lag() steps between interleaved series and the summed rate is silently wrong. That case needs the attribute set in the PARTITION BY, which run_sql cannot express today, so pin the query to a single series in its WHERE, or use a metric alert rule, which partitions per series. This reads the metrics table directly, which does not expose temporality, so it assumes the metric is cumulative; for a delta-temporality metric sum(value) over the window is already the answer. list_metrics reports which is which. Limitations: - Read-only SELECT only (no INSERT/UPDATE/DELETE/UNION). - No CROSS JOIN (use explicit JOIN ... ON). - No SYMMETRIC BETWEEN (order the bounds and use plain BETWEEN). - JOINs require qualified field references (e.g. l.service, s.name). - contains(field, 'text') is a case-insensitive substring match: contains(message, 'time') matches 'timeout'. regexp_matches(field, 'pattern') is also substring, but CASE-SENSITIVE — 'GET' will not match 'get'. Prefix the pattern with (?i) to opt in to case-insensitive matching, e.g. regexp_matches(message, '(?i)get'). matches('text') searches message, attributes, and service together. Time bounds: a statement whose WHERE clause has no lower bound on timestamp is limited to the last 7 days. Add timestamp >= '<iso instant>' or timestamp >= now() - INTERVAL n DAY to look further back. Prefer purpose-built tools when they fit: use correlate when you have a trace id (returns spans, logs, and metric exemplars in one call), get_trace for the span tree alone, and aggregate_spans to find where errors or latency are concentrated before drilling in. Use run_sql for ad-hoc analysis that the other tools don't cover. Examples: SELECT service, count(*) FROM logs WHERE level = 'ERROR' GROUP BY service SELECT service, p95(duration_ms) FROM spans GROUP BY service SELECT bucket(timestamp, '5m') AS t, count(*) FROM logs GROUP BY t ORDER BY t SELECT http_method, count(*) FROM logs GROUP BY http_method SELECT http.response.status_code, count(*) FROM logs GROUP BY http.response.status_code SELECT s.name, l.message FROM spans s JOIN logs l ON s.trace_id = l.trace_id SELECT service FROM logs WHERE service IN (SELECT DISTINCT service FROM spans) SELECT error_burn_rate(0.001) AS value FROM spans WHERE service = 'my-svc' Time-typed columns (timestamp, bucket(...)) come back as ISO-8601 UTC strings. Returns rows, queryStats, and: explorerUrl: for a statement over logs only, a shareable Fixter UI link that opens this exact statement in the log explorer's read-only SQL mode over its window — attach it when citing the result as evidence. Absent for spans, metrics and joins, which the explorer cannot open. priorWindow: when compareWithPriorWindow is true, {from, to, rows} for the same statement run over the window of equal length immediately before this one, so a count or group-by is read against its own baseline in one call. The statement needs literal ISO bounds on timestamp (>= and <, or BETWEEN); otherwise priorWindow carries an error and rows are still returned. truncatedRows: set when rows were dropped from the end to fit maxChars, with a truncationHint saying how to narrow. Rows are dropped, never rewritten, so a sorted result keeps its head.
    ConnectorAPI key
  • Present a REAL game controller to an iOS device and set its state. The device registers a virtual DualShock 4 and receives genuine controller HID, so NATIVE apps see a GCExtendedGamepad and a web page sees a W3C standard-mapping pad in navigator.getGamepads(). It shows up in Settings > General > Game Controller. No Safari page is required. HOW TO FIRE INPUT PROPERLY: • One call = ONE frame = one instant in time. A button stays pressed until you send a frame WITHOUT it, so every press needs a matching release frame — exactly like keydown then keyup. Sending press after press just holds them all down. • For anything that should look played rather than stepped — mashing, combos, a stick sweep — pass `frames` instead of calling repeatedly. The device plays the whole sequence out at `intervalMs` (default 33 ms ≈ 30 fps). A round trip per frame cannot reach that cadence, so a rapid sequence built out of single calls will always read as held buttons. • Alternate press and release inside `frames`: [{buttons:[1]}, {}, {buttons:[0,1]}, {}] is tap A, release, tap A+B, release. • Axes are [leftX, leftY, rightX, rightY], -1..1. Sweep them across frames to roll a stick; omitted axes read as 0. • READ THIS BEFORE REPORTING A STICK BUG: a stick axis can only express RIGHT and UP on `axes[0..1]`, because the report's joystick fields are unsigned. The left stick's full 360-degree analog push IS delivered, but it arrives on the D-PAD — `buttons[12..15]`, and `GCExtendedGamepad.dpad.xAxis/yAxis` for native apps, which are bipolar. Reconstruct it as x = right - left, y = down - up. Pushing left and reading `axes[0] === 0` is the EXPECTED, structural behaviour, not a fault to debug. • While a sequence is playing, this call owns the pad — a controller streamed from a live viewer is paused and resumes on its own shortly after. • Confirm the pad EXISTS with ios_gamepad_status; confirm VALUES in the app under test. Input routes to whatever holds focus, so foreground the app under test first — measuring while Settings or another app is in front reads as "nothing works".
    ConnectorOAuth
  • Map the full dependency tree of an npm package and identify CRITICAL supply chain risks at every level. Unlike auditing a flat list of packages, this tool traverses the dependency graph — showing not just your direct dependencies but also what your dependencies depend on. Hidden CRITICAL packages (sole publisher + >10M weekly downloads) often lurk 1-2 levels deep. Risk flags: - CRITICAL: single npm publisher + >10M weekly downloads — sole point of failure for a massive attack surface - HIGH: sole publisher + >1M/wk, OR new package (<1yr) with high adoption - WARN: no release in 12+ months (potential abandonware) depth=1 (default): root package + all direct dependencies depth=2: also traverses one more level for any CRITICAL/HIGH direct deps (reveals hidden exposure) Examples: - audit_dependency_tree("express") — see all of Express's deps and their risk scores - audit_dependency_tree("langchain", 2) — reveal transitive CRITICAL deps 2 levels deep - audit_dependency_tree("@anthropic-ai/sdk") — audit Anthropic SDK full tree Use this when someone asks: - "What am I really depending on?" - "Are my dependencies' dependencies safe?" - "Show me the full supply chain risk for package X"
    ConnectorNo auth

Matching MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server for the eXpress corporate messenger, enabling AI agents to list chats, search contacts, send messages, and wait for incoming messages with end-to-end encryption.
    233 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables macOS agents to read eXpress chats and threads, search contacts, send messages and attachments, and download verified files through MCP, while a Keychain-backed session broker manages authentication.
    1 npm
    MIT

Matching MCP Connectors

  • expressOAuth

    AI Retrievability by Norg — mirror and optimize your site for AI agents like ChatGPT and Claude.

  • Interact with climate metrics via Riskthinking.AI's CDT Express API in supported AI chat experiences

  • Returns instructions for migrating to PropelAuth in a frontend framework such as React, JavaScript, TypeScript, or when using Next.js for just the frontend (e.g. client-side rendered). Guidance includes migrating from several auth providers, such as Clerk or Auth0. Each guidance will include documentation from the auth provider and PropelAuth. It is important to follow the instructions carefully to ensure a successful integration. Make sure to use the 'Installation' guidance first. It is important to call every guidance to ensure a successful integration. Do not update a component/hook/etc from the auth provider until you receive guidance about that component/hook/etc. CRITICAL: If the current implementation uses a traditional OAuth/OIDC flow (e.g., via express-openid-connect, passport-auth0, or similar backend-managed session libraries), you MUST select 'OAuth' as the framework, regardless of the frontend library (React/Vue/etc.). Only select 'React' or 'Javascript' if the current implementation uses a frontend-only SDK (like @auth0/auth0-react) or if using fullstack Next.js.
    ConnectorNo auth
  • Reports a problem with homespun itself to the relay operator, and lists what this agent has already reported. A report is the operator's only visibility into a failure that happened inside an agent's session, so an unreported one is a failure nobody can fix. The channel covers homespun's own behaviour: a 5xx, or an error code the guide does not describe; a disagreement between documented and observed behaviour; something the tool surface cannot express, such as a missing capability or a schema that contradicts itself; an app misbehaving in a way that traces back to the platform (the bridge, the runtime, serving, the data API) rather than to authored HTML; or a guide that was wrong, ambiguous or silent. Outside its scope: the human's own task; bugs in an app the agent authored; presentation preferences, which belong in `taste`; the human's own configuration, such as a missing API key or the wrong account; and a 4xx caused by the agent's own arguments, except where the error message itself was misleading, which is a documentation problem best filed as a `note`. Duplicates cost the operator triage rather than adding signal. Action `list` returns this agent's own submissions, newest first, so a failure already recorded needs no second row: one report covers one distinct failure, however many times it was retried. The operator sees the row and not the session, so a bare "deploy failed" is not actionable. An actionable `message` carries the surface (mcp, cli, relay or app-runtime); where it happened (the tool or route); the skill version, from the `<!-- homespun skill vX.Y.Z -->` comment at the top of the guide; what was expected, in one line; what was observed, in one line carrying the exact error code and message; and the minimal steps or arguments that reproduce it. `type` is bug for something broken, feature for something missing, note for a rough edge or a confusing doc. `app_id` scopes a report to one app. There is no reply channel, so a report is not a route to an answer. Actions: create files one report; list returns this agent's own submissions, newest first, paginated by `before`.
    ConnectorNo auth
  • Reports a problem with homespun itself to the relay operator, and lists what this agent has already reported. A report is the operator's only visibility into a failure that happened inside an agent's session, so an unreported one is a failure nobody can fix. The channel covers homespun's own behaviour: a 5xx, or an error code the guide does not describe; a disagreement between documented and observed behaviour; something the tool surface cannot express, such as a missing capability or a schema that contradicts itself; an app misbehaving in a way that traces back to the platform (the bridge, the runtime, serving, the data API) rather than to authored HTML; or a guide that was wrong, ambiguous or silent. Outside its scope: the human's own task; bugs in an app the agent authored; presentation preferences, which belong in `taste`; the human's own configuration, such as a missing API key or the wrong account; and a 4xx caused by the agent's own arguments, except where the error message itself was misleading, which is a documentation problem best filed as a `note`. Duplicates cost the operator triage rather than adding signal. Action `list` returns this agent's own submissions, newest first, so a failure already recorded needs no second row: one report covers one distinct failure, however many times it was retried. The operator sees the row and not the session, so a bare "deploy failed" is not actionable. An actionable `message` carries the surface (mcp, cli, relay or app-runtime); where it happened (the tool or route); the skill version, from the `<!-- homespun skill vX.Y.Z -->` comment at the top of the guide; what was expected, in one line; what was observed, in one line carrying the exact error code and message; and the minimal steps or arguments that reproduce it. `type` is bug for something broken, feature for something missing, note for a rough edge or a confusing doc. `app_id` scopes a report to one app. There is no reply channel, so a report is not a route to an answer. Actions: create files one report; list returns this agent's own submissions, newest first, paginated by `before`.
    ConnectorNo auth
  • Create a German GmbH/UG incorporation case and return a secure Beglaubigt link where the founder provides their remaining personal details (date of birth, nationality, home address) and pays. The agent NEVER handles payment and NEVER asks for date of birth, nationality, or a person's home address in chat — those are collected only on the returned page. Collect in chat: the company (legal_form 'gmbh'|'ug', full `name` INCLUDING the legal-form suffix e.g. 'Velocent UG (haftungsbeschränkt)', `purpose`, `capital`, registered `address` and `business_address`), the `notarization` (its `type` — 'online' or 'offline' — is REQUIRED and has no default; optional `express` boolean; optional `preferred_timeframe` of 7, 14 or 30), the ownership structure (each shareholder's `share_percentage` and whether they are a managing director), and — for the first (founder) shareholder only — their `first_name` and `email` so Beglaubigt can send the completion link (tell the founder you will share their email with Beglaubigt for this). Share capital must be a whole number of euros and meet the legal minimum: GmbH at least 25000, UG at least 1. Share percentages must total 100. At least one shareholder must be a managing director, or a separate director must be included. Musterprotokoll (the standard template) supports at most 3 shareholders and exactly one managing director. Leave `documents` unset: Beglaubigt derives the articles type from the structure you send — one director with 1–3 shareholders gets the Musterprotokoll, anything larger gets individual (custom) articles. A notarization preferred_timeframe, if provided, must be 7, 14, or 30. Governance terms apply only when the derived articles are individual; Beglaubigt ignores them for a Musterprotokoll. You may optionally set: shareholders_meeting_quorum, shareholders_resolution_majority, significant_transactions_majority (percentages 0–100), representation_type ('joint' | 'sole' | 'section181'), majority_type ('simple' | 'two_thirds' | 'unanimous'), and notice_period_months. The optional additional_services field just records which follow-up options the founder wants information about later. It is non-binding: including it orders nothing, enrols the founder in nothing, and adds no charge — the link covers the one-time incorporation fee only. Recognised values: 'authority-registrations', 'business-liability-insurance', 'trademark-registration', 'bookkeeping', 'tax-advisor-support', 'business-address'. `package` (set at `incorporation.package`) is REQUIRED by this tool and sets the price shown on the completion page. The tiers are 'simple' | 'standard' | 'priority'. Ask the founder which one they want and send their answer — never choose for them. There is no package step on the completion page, so if you do not ask, the founder is never asked at all. Read the `packages://incorporation` resource for each tier's scope and structural limits, and tell the founder that exact prices depend on the partner tenant and are shown on the completion page before they pay — do not quote a figure yourself. Omitting the package is refused before anything is created, because omission silently bills the middle tier. Calls are NOT idempotent: every successful call creates a new incorporation case. When collecting these details, gather them conversationally across turns — one field at a time for each person — instead of asking for everything in a single message; call this tool only once all details are confirmed.
    ConnectorNo auth
  • Build the per-window x per-party concurrent-delay attribution matrix from a chronological list of XER snapshots. Implements the per-window concurrency view per AACE RP 29R-03 §3.3.I (apportionment) and §4.2 (concurrency). Where ``forensic_windows_analysis`` answers "how many days does each party own across the whole project?", this tool answers "how did each window distribute its shift across the parties?" — useful when defending or attacking concurrency findings on a window-by-window basis. CPP conservation check, per the AACE 29R-03 §3.3.E.13 requirement that the summed per-period net impacts equal the difference between the first schedule update and the last schedule update used in the evaluation: the sum of per-party column totals equals the sum of per-window completion shifts within ±1 day of rounding. The column-total definition is this tool's own bookkeeping, not an AACE rule. The ``conservation_check`` field on the response reflects this; ``conservation_diff_days`` carries the exact gap. IMPORTANT — conservation is NOT attribution. ``conservation_check`` can be True (the columns sum to the grand total) even when 100% of the shift lands in the Unattributed column, i.e. no party owns any of the drift. Read ``unattributed_share_pct`` and ``high_unattributed_share_warning`` to know whether a meaningful apportionment actually occurred. A fully-unattributed matrix conserves perfectly but attributes nothing — never present its green conservation check as a validated apportionment. Use this tool when you only need the matrix view; use ``forensic_windows_analysis`` for the full claim. Args: schedules: chronologically ordered list of dicts — the SAME shape ``forensic_windows_analysis`` accepts. Each dict carries ``label`` (optional) and EXACTLY ONE of ``xer_content`` (full XER text, hosted/remote use) or ``xer_path`` (server-side path, local use). This is the preferred input for hosted/remote clients. xer_paths: legacy chronologically ordered list of server-side XER file paths (local-server use). xer_contents: legacy chronologically ordered list of XER text contents. Each element is the full text of one XER. Supply EXACTLY ONE of schedules / xer_paths / xer_contents (lists must have at least 2 entries either way). Returns: { "parties": ["Owner", "Contractor", "Concurrent", "Force Majeure", "Unattributed"], # Unit for every shift_* field and the grand totals. Always # "working_days" — the matrix measures the completion shift # in working days (Dana default). The *_calendar_days twins # express the SAME shift in calendar days so an unlabeled # "11" can never be mistaken for the 15-calendar-day value. "shift_unit": "working_days", "rows": [{ "window_label", "period_start", "period_end", # shift_days == shift_workdays (working days, # legacy alias). shift_calendar_days is the same # shift in calendar days; shift_basis names the # finish driver the shift was measured on. "shift_days", "shift_unit", "shift_workdays", "shift_calendar_days", "shift_basis", "parties": {party: days}, "cascade_inferred": bool }, ...], "column_totals": {party: days}, "grand_total_shift": int, # working days (legacy) "grand_total_shift_workdays": int, "grand_total_shift_calendar_days": int | None, "conservation_check": bool, "conservation_diff_days": int, # Disambiguates "conserved AND attributed" from "conserved # but entirely Unattributed". unattributed_share_pct is # |Unattributed| / sum|shift| as a percent; the warning # flips True when that share is dominant (>= 50%). "unattributed_share_pct": float, "high_unattributed_share_warning": bool, "standard": "AACE RP 29R-03 §3.3.I (apportionment) · §4.2 (concurrency)", "data_date_corrections": the record of each update whose data date was moved to its latest actual, and of a baseline with actual dates after its data date ([] on clean files); each is also a data-quality warning }
    ConnectorNo auth
  • Live shipping rates for one parcel sent from a US origin — inside the US, or to Canada, the UK, Germany or Australia — across USPS, UPS and FedEx, and DHL Express on the German and Australian lanes. Describe the item in plain words and the packed box size and weight are estimated. Give exact dimensions and weight to skip the estimate. Returns up to five purchasable services, each as one checkout total with the SMKlog fee inside it (the fee is itemized only on the checkout receipt) and, where the carrier publishes one, its own counter price for the same parcel beside it. Not every request is priced. A shipment past parcel limits or described as a pallet or freight load returns mode not_a_parcel with no rates: SMKlog does not arrange pallet or freight shipments. More than one box returns mode multiple_boxes with no rates: one label per box, so quote each box with quantity 1. Shipping labels are bought on smklog.com, not through this tool. Choosing between the tools: use this one to answer what a shipment would cost. Then hand the quote_id it returns to create_checkout_link once the human has settled on shipping this exact parcel, so the pair costs one carrier call rather than two. Use get_price_index instead for typical or historical prices: it is free, while this tool spends a rate-limited carrier call every time. Parameter rules: - weight_lb, length_in, width_in and height_in count only as a set of four, each above zero. Leave any one out and all four are ignored in favor of the estimate, so never send weight alone. - One label per box. quantity counts units of the item: units that fit one box are priced as that box (two books go in one carton), and units that need more than one box return mode multiple_boxes, as does any quantity above 1 sent with exact dimensions, since those describe a single box. A box past the largest parcel any carrier here takes (150 lb, 108 in on the longest side, 165 in of length plus girth; USPS stops lower, and only services that take the box are listed) or a product described as a pallet or freight load (a pallet of, LTL, truckload, shipping container) returns mode not_a_parcel. Neither carries rates. - product is the item itself, up to 200 characters. A bare route ("to Canada"), a bare weight ("7 lbs") or a question is refused as product_not_recognized before any carrier is called. - from_zip must be a real 5-digit US ZIP (ZIP+4 is trimmed to five), or the call fails with invalid_us_zip. - to_zip follows to_country: a 5-digit ZIP for US, otherwise that country's own postal code handed to the carriers as typed. A to_country outside US, CA, GB, DE and AU is refused as international_unsupported_online, so do not retry it with a different box. - Allowance: 80 calls an hour per client, shared with the public /quote route.
    ConnectorNo auth
  • Calculate the Net Present Value (NPV) of an ordered cash-flow series discounted at a given rate. The first cash flow is treated as time 0 and is NOT discounted (typically the negative initial investment). WHEN TO USE: to evaluate whether an investment creates or destroys value at a required discount rate, or to compare competing projects on a present-value basis when you have a full cash-flow schedule. WHEN NOT TO USE: for a single lump-sum investment with one exit value (use calculate_irr), or when you only need a money multiple with no time value (use calculate_moic). BEHAVIOUR: pure deterministic calculation — no side effects, no network or storage access; idempotent and non-destructive; identical inputs always produce identical outputs. RETURNS: JSON object { npv: number rounded to 2dp, rate, cash_flows }. A positive NPV means the investment clears the discount-rate hurdle. PARAMETERS: rate (decimal discount rate, e.g. 0.10 = 10% — express as a decimal, never as percentage points), cash_flows (ordered number array starting at time 0; negative values are investments/outflows, positive values are distributions/inflows), e.g. [-100000, 0, 0, 0, 0, 250000].
    ConnectorNo auth
  • Check whether one or more dm-drogeriemarkt products are available in one or more specific stores right now. USE WHEN: you need to know if one or more products can currently be bought in one or more particular physical stores. INPUT: one to five storeIds and one to ten DANs (dm product numbers). OUTPUT: for each requested DAN, whether it was found and a status per requested storeId - VERFUEGBAR (available, includes current stockLevel), NICHT_VERFUEGBAR (not available in this store right now), NUR_ONLINE (this product is not carried in ANY dm store, not just this one), PRODUKT_UNBEKANNT (DAN not found), or STORE_UNBEKANNT (storeId does not exist in our system). IMPORTANT: NUR_ONLINE means the product itself is never sold in physical dm stores - it will be the same result for every store. Do not check other or nearby stores for that product; tell the customer it is online-only right away. IMPORTANT: storeIds MUST come from the findNearbyStores tool - call it first to resolve the storeId(s) for a location. Never invent, guess, or otherwise make up a storeId yourself; a made-up storeId will come back as STORE_UNBEKANNT instead of a real availability answer. IMPORTANT: if a customer asks about availability for several products, pass ALL of their DANs (up to 10) into this single call. Never assume, infer, or extrapolate the availability of a product you have not included in a call and gotten a result for - not even from a similar or already-checked product, and not even for "usually available" items. When reporting back, state the result for every single product individually (e.g. one line per product) - never collapse multiple products into one summary statement such as "all of them are available". TIP: if a product's result is NUR_ONLINE, or it is NICHT_VERFUEGBAR and you already know from an earlier product lookup that it is available online, suggest buying it online instead and include a link to the product page if you have one. NOT FOR: click & collect / express pickup or same-day delivery eligibility (not covered by this tool), or repeatedly polling a store's stock over time. ERRORS: validation error if any DAN is invalid, dans is empty, more than 10 dans are given, storeIds is empty, or more than 5 storeIds are given.
    ConnectorNo auth
  • Calculate the Net Present Value (NPV) of an ordered cash-flow series discounted at a given rate. The first cash flow is treated as time 0 and is NOT discounted (typically the negative initial investment). WHEN TO USE: to evaluate whether an investment creates or destroys value at a required discount rate, or to compare competing projects on a present-value basis when you have a full cash-flow schedule. WHEN NOT TO USE: for a single lump-sum investment with one exit value (use calculate_irr), or when you only need a money multiple with no time value (use calculate_moic). BEHAVIOUR: pure deterministic calculation — no side effects, no network or storage access; idempotent and non-destructive; identical inputs always produce identical outputs. RETURNS: JSON object { npv: number rounded to 2dp, rate, cash_flows }. A positive NPV means the investment clears the discount-rate hurdle. PARAMETERS: rate (decimal discount rate, e.g. 0.10 = 10% — express as a decimal, never as percentage points), cash_flows (ordered number array starting at time 0; negative values are investments/outflows, positive values are distributions/inflows), e.g. [-100000, 0, 0, 0, 0, 250000].
    ConnectorNo auth
  • Calculate the Net Present Value (NPV) of an ordered cash-flow series discounted at a given rate. The first cash flow is treated as time 0 and is NOT discounted (typically the negative initial investment). WHEN TO USE: to evaluate whether an investment creates or destroys value at a required discount rate, or to compare competing projects on a present-value basis when you have a full cash-flow schedule. WHEN NOT TO USE: for a single lump-sum investment with one exit value (use calculate_irr), or when you only need a money multiple with no time value (use calculate_moic). BEHAVIOUR: pure deterministic calculation — no side effects, no network or storage access; idempotent and non-destructive; identical inputs always produce identical outputs. RETURNS: JSON object { npv: number rounded to 2dp, rate, cash_flows }. A positive NPV means the investment clears the discount-rate hurdle. PARAMETERS: rate (decimal discount rate, e.g. 0.10 = 10% — express as a decimal, never as percentage points), cash_flows (ordered number array starting at time 0; negative values are investments/outflows, positive values are distributions/inflows), e.g. [-100000, 0, 0, 0, 0, 250000].
    ConnectorNo auth
  • Replay a freeform stroke as ONE continuous touch — the polyline lands exactly as given, so use it for curves, arcs, signatures, unlock patterns, or any gesture a straight device_swipe cannot express. `points` is an ordered list of {x, y}; the first is touch-down, the last is lift. Minimum 2 points. Waypoints are sent AS GIVEN and not densified — the polyline you pass IS the gesture, so pass enough points to describe the curve. Prefers the HID touchscreen and falls back to injected MotionEvents. Coordinates are PHYSICAL pixels — same as device_page_source bounds. The iOS counterpart is ios_gesture_path.
    ConnectorOAuth
  • Reads the AI Visibility dashboard of the website: how often AI assistants (ChatGPT, Claude, Gemini, Perplexity, Copilot, Google AI Overview and AI Mode, plus Grok and Mistral when the website pays for them) mention and cite the brand when answering its tracked prompts. For the range (7d, 30d, 3m or 6m, default 30d) it returns the overall mention rate and cited rate with the number of prompts and answers checked; the same per platform (only platforms with checks in the range); the trend (mention rate over the first half of the range vs the second half); the leaderboard of the brand (is_own) and its tracked competitors by mention rate; each prompt with its latest state per platform from the last 21 days of checks (mentioned_cited, mentioned, not_mentioned, or pending while a check is queued, running or failed), its mention rate across those latest checks and the competitor mentioned most for it; the most cited domains and the brand's own cited pages; and the sentiment drivers (strengths and weaknesses AI answers express about the brand) once enough brand-mentioning answers exist. Pass surface to restrict every number to one platform and include_answers=true for the latest answer text per prompt (600 characters max). Rates are percentages, null when nothing was checked. Fails with an activation link when the AI Visibility add-on is not active. Read-only: it cannot add prompts or competitors, and it is not Google Search Console data (use get_keyword_rankings for that). Pass website_id when the account has several websites (see get_account).
    ConnectorOAuth
  • Use when the user asks "will my flight have Starlink?" for a date too far out for a confirmed assignment, or with no date at all. Returns the probability that a United Airlines flight number gets a Starlink plane, from historical observations. Reliability varies: high-confidence (5+ obs) is the most reliable tier but is not a guarantee; low-confidence (0-1 obs) is just the fleet prior. UA1-2999 (mainline) has materially lower coverage than UA3000-6999 (express) — call get_fleet_stats for the current split rather than assuming a rate.
    ConnectorNo auth
  • Scaffold a flags-only Bridge integration into an existing project — the MCP equivalent of `bridge flag init`. Returns everything that command produces, for YOU to write to disk: the contents of bridge-flags.config.json (app id, app name, base URL, suggested provider config, read live from this Bridge app), the install command, and the framework-specific setup guide fetched from the plugin repo that owns it. Writes nothing — neither to disk nor to the Bridge app. Call this when adding feature flags to a project for the first time; for auth or billing use get_integration_guide with topic=master or topic=billing-master instead. framework is REQUIRED: this server cannot see the caller's disk, so detect it yourself from package.json (next → nextjs, @sveltejs/kit or svelte → svelte, @nestjs/core → nestjs, @angular/core → angular, react → react, express → express; check in that order) and pass it. The returned guide is the same document get_integration_guide returns for topic=feature-flags, so there is no need to call both. Do not invent import specifiers — they differ per plugin and only the guide has the current ones.
    ConnectorOAuth
  • Create one PowerPoint slide (.pptx, native, editable) from a structured intent in ONE call: pick a `form` from the menu and put your content in the typed fields (placed on the slide as given), or pass a `brief` and let the server route it. Fields tagged (per-form) bind only where the form has that slot — ignored-with-warning elsewhere; see each form's `binds` in browse_catalog. BLOCKED (not billed)? If an error has `can_autofix:true`, merge its `patch` into the args at `patch_target`. Unchanged retries repeat the block. New form: browse_catalog(type=schema) first. FORM MENU: agenda_list: an ordered list of sections/topics or learning objectives to walk through bar_rank_chart: bars comparing magnitudes across categories calendar_grid: events on a real calendar - week planner (day x hour) or month grid with event chips (data.events) card_grid: several equal, unordered peer blocks (features, options, pillars, a concept's defined parts, rules/guidelines/common mistakes) case_story: one named story told as evidence, proven by measured results (data.results = figures) comparison_matrix: options x criteria grid: data.columns x data.rows cycle_flow: a closed loop of ordered stages where the last feeds the first (recurring process) data_table: a plain factual table of records by fields editorial_split: two side-by-side halves: contrast (before/after, problem/solution) or copy/numbered steps beside a picture (image_src) exercise_prompt: an exercise/practice/discussion prompt: instruction + hints; optional problem items with blank answer boxes funnel: a quantity narrowing through ordered stages gantt_plan: tasks as bars across named periods on a schedule grid gauge_score: one score on a dial against a scale hero_statement: a statement slide: covers (title/image-led/exec), from->to/thesis-quote transitions, statement/contact/next-steps closings; supporting points -> takeaway_stack, contacts -> data.contacts, next steps -> data.next_steps hub_spoke: one central element with several elements connected around it image_story: a picture shown WHOLE (uncropped) + prose and up to 4 labelled blocks beside it, or a 1-6 picture/placeholder gallery (data.images) kpi_metrics: a metrics dashboard: headline metric cards; data.sections (Highlights/Risks/Asks) makes it an exec summary / QBR snapshot layer_stack: stacked layers where higher sits on, and depends on, lower linear_flow: ordered process stages read left to right (or inputs to process to outputs) maturity_staircase: ascending levels climbing to a higher state nested_magnitude: nested containment - each level contains the next org_structure: a reporting hierarchy / org tree position_map: items placed by two axes - named 2x2 cells or scatter positions pyramid_hierarchy: a triangle of stacked tiers, foundation to apex ramp_curve: a continuous rising wedge split into phases - effort or value accumulating over time section_divider: a section-break: big section number + title; blocks = agenda progress chips (emphasis=primary = current) segment_wheel: a wheel of equal segments around a center - peer categories in the round (composition, not flow) status_dashboard: initiatives/workstreams tracked by status, owner, progress strategic_fork: one origin splitting into two mutually exclusive paths, one recommended swimlane_flow: actor/function lanes by phases, task cells, handoffs across lanes swot: the four-quadrant strengths / weaknesses / opportunities / threats grid system_flow_map: architecture/system components: panels with internals (edges optional) or nodes wired by directed arrows takeaway_stack: a title plus a few supporting points, each with one line of detail (executive summary, key findings); optional closing ask timeline_roadmap: milestones/phases laid out along a time axis trend_chart: one or more series plotted over time value_chain: support bands over primary activity columns flowing into a goal arrowhead (data.support = the bands) visual_showcase: one dominant screenshot/image with numbered callouts pointing into it waterfall_bridge: a start value bridged to an end value by plus/minus contributions Exact per-form data shapes: browse_catalog(type=schema, family=<form>) — the generated,always-current JSON Schema + a worked example. (List-shaped forms take `blocks`: [{"label","sub","detail":[str],"emphasis"}]; structured forms take typed `data`.) Escape modes: mode=code (caller-supplied python-pptx in sandbox — use for forms the menu cannot express: calendars, custom diagrams); mode=status (poll a job, free). Image-led asks (photo covers, full-bleed visuals): hero_statement + image_prompt or image_src.
    ConnectorNo auth