dev.testsy/testsy

Testsy

Run plain-English web QA tests and inspect check results and evidence.

Endpointhttps://app.testsy.dev/mcp (streamable-http)
Registry version1.0.2
Now47 tools · grade D (55) · pin ts_84e4065b9420538b2a33e82a43fd5c46 · protocol 2025-06-18
First / last listed2026-11-10 06:07 UTC / 2026-11-10 06:07 UTC
Grade over time2026-11-10: D (55), 47 tools

Is this your server? Own a server? ToolFit hosted watch re-checks it every 24 h ($0.25 per 30 days) or 6 h ($0.60) and sends you an HMAC-signed webhook when its tools or grade change: POST https://api.youraitools.co/toolfit/v1/watch. To opt out, see About & opt-out.

Timeline

First listing · 2026-11-10 06:07 UTC
47 tools, grade D (55)

Tools: get_workspace get_usage get_network set_browse_from list_projects get_project create_project update_project delete_project list_tests get_test create_test update_test delete_test plan_test list_test_files add_test_file delete_test_file list_credentials add_credential delete_credential list_endpoints add_endpoint delete_endpoint run_test run_project list_runs get_run wait_run stop_run create_watch_link revoke_watch_link list_share_links create_share_link delete_share_link list_schedules create_schedule update_schedule delete_schedule list_devices list_builds get_build find_build create_build_upload import_build complete_build_upload delete_build

Current tools (47)

get_workspaceThe workspace this key belongs to: its id, name and plan, and this period's usage.
params: none
get_usagePlan, runs used this billing period, included runs, extra-run packs and runs left.
params: none
get_networkHow our browsers reach your sites: the static addresses to allow-list, the country they browse from, and the countries available.
params: none
set_browse_fromChoose the country our browsers visit your sites from (web tests), or automatic: the site's own country.
params: country*
list_projectsThe projects in this workspace (a project groups the tests of one site or app).
params: none
get_projectOne project.
params: projectId*
create_projectCreate a project, for example one per site or app.
params: name*, description
update_projectRename a project or change its description.
params: projectId*, name, description
delete_projectArchive a project: its tests stop running; past runs stay in the run history.
params: projectId*
list_testsThe tests of a project, each with its latest run.
params: projectId*
get_testOne test: its start address, requirement, plan, options and latest run.
params: testId*
create_testCreate a test of a website (url) or of an app (platform android or ios, and appId; device phone or tablet and osVersion, default a phone on the latest OS). Pass `plan` (from plan_test, after the requester confirmed it): it is stored as the approved checklist and the tester follows it as written. Or pass `requirement`, plain-language text the tester plans itself at run time. Never put passwords in
params: projectId*, title*, url, requirement, plan, platform, appId, buildId, device, osVersion, orientation, credentials, options
update_testChange a test: its title, start address, requirement, plan or options. Only the fields you pass change; within `options`, only the options you pass change and the others keep their values.
params: testId*, title, url, requirement, plan, device, osVersion, orientation, options
delete_testArchive a test: it stops running; past runs stay in the run history.
params: testId*
plan_testHave the assistant draft a test from a plain-language description, or revise a plan, without saving anything. Returns the proposed steps, checks, values to record, assumptions and any questions only the requester can answer. Show the plan to the requester; to change it, call again with `plan` and `change`; to answer questions, pass `answers`. Once they confirm, pass the plan to create_test. When n
params: description*, url, projectId, platform, appId, plan, change, answers
list_test_filesFiles a test can upload during its steps (for example an import file).
params: testId*
add_test_fileAdd a file the tester can upload during the test: up to 25 MB, up to 10 files per test. REST: send the raw bytes as the body with the file name in the X-File-Name header (or ?name=), or JSON {name, contentBase64}. MCP: name and contentBase64. A file with the same name replaces the old one.
params: testId*, name*, contentBase64, contentType
delete_test_fileRemove one of a test's files.
params: testId*, name*
list_credentialsThe sign-in accounts stored for a project: names, usernames and sites. Passwords are never returned.
params: projectId*
add_credentialStore a sign-in account the tester can use. The password is encrypted, never returned, and never sent to the tester's AI: the tester types it. Tests refer to the account by name ("Sign in as the account \"customer\""). Through MCP the password passes through your AI agent: prefer adding passwords in the web app or over the REST API from a secret store.
params: projectId*, name*, username*, password*, site
delete_credentialDelete a sign-in account. Tests that sign in with it stop running until it is added again or they are edited.
params: credentialId*
list_endpointsCalls into your own systems the tester may make during a run (for example "create a voucher"). Headers are never returned.
params: projectId*
add_endpointAdd a call the tester may make into your system. It sees only the name, the description and what the call returned. Using endpoints in a run needs a paid plan. bodyTemplate may contain {{param}} placeholders the tester fills in. Headers (for example Authorization) are encrypted and never returned.
params: projectId*, name*, description*, method, url*, headers, bodyTemplate
delete_endpointDelete an endpoint.
params: endpointId*
run_testStart a run of one test. Runs take minutes: poll get_run until final is true. watchUrl opens the run live without signing in. App tests run the newest build of their app unless buildId names another (see list_builds). watchUrl is a view-only link anyone can open (no sign-in) to watch the run live and read its result for a while after it ends; give it to the person waiting for the result. Absent wh
params: testId*, mode, buildId, device, osVersion, orientation, url
run_projectStart a run of every test in a project (a suite). Each started run has a watchUrl to watch it live without signing in. buildIds: builds to use; each app test runs the one of its own app. Tests that could not start are listed in skipped with the reason. REST: send an Idempotency-Key header to make a retry safe.
params: projectId*, mode, buildIds, buildId, device, osVersion, orientation, url
list_runsRecent runs, newest first, optionally for one test or project or with one status; or the runs with the given ids.
params: ids, testId, projectId, status, limit
get_runA run: its status, and once final the verdict, the headline, each check's result with the reason, the values read, and links to the video, screenshots and the result page.
params: runId*
wait_runWait up to seconds (default 25, at most 55) for a run to finish, then return it: one call instead of polling get_run every few seconds. Call it again while final is false. The answer comes back the moment the run is final (verdict, checks and evidence in), or when the time is up with final false — then call wait_run again. Runs take 2 to 20 minutes, so expect several calls for a long run; each cos
params: runId*, seconds
stop_runStop a queued or running run. A run you stop is not counted.
params: runId*
create_watch_linkA view-only link to watch a run live and read its result, with no sign-in, valid while it runs and for some hours after. Runs started here get one automatically; this makes another, or one for a run started from the web app. The link shows the live screen, the steps and checks so far, then the read-only result. membersOnly is true when the workspace limits watch links to signed-in members (or the
params: runId*
revoke_watch_linkTurn off every watch link of a run straight away.
params: runId*
list_share_linksThe share links made for a run, with when they expire and how often they were opened.
params: runId*
create_share_linkA read-only link to a run's result, replay and video that anyone can open without signing in, until it expires.
params: runId*, days
delete_share_linkTurn off a share link straight away.
params: shareId*
list_schedulesWhen tests run by themselves: every schedule in the workspace, or those of one test or project.
params: testId, projectId
create_scheduleRun a test by itself: on chosen weekdays, or monthly on a day, at a time in a time zone. Each scheduled run counts like any other run.
params: testId*, days, dayOfMonth, time*, timezone
update_schedulePause or resume a schedule.
params: scheduleId*, enabled*
delete_scheduleDelete a schedule.
params: scheduleId*
list_devicesThe phones and tablets app tests can run on, and their OS versions (latest first). Pass device and osVersion to create_test, update_test, run_test or run_project. A new app test runs on a phone with the latest OS unless you choose otherwise; the version is saved with the test, so it keeps its OS until you change it.
params: none
list_buildsThe app builds uploaded to a project (Android .apk, iOS Simulator .app zipped), newest first, with the largest size and part size for uploads.
params: projectId*
get_buildOne build: its app id, version, status and any warnings.
params: buildId*
find_buildIs this build already uploaded? Looks up the project's newest ready build by the file's sha256, else by a native fingerprint; build is null when neither matches. A sha256 match means the exact file is uploaded: run it with run_test {buildId} / run_project {buildIds} instead of uploading again. A fingerprint match (a hash of the native inputs the uploader stored with the build, for example @expo/fi
params: projectId*, sha256, fingerprint
create_build_uploadStart a build upload and get signed links that upload the file without an API key: run the returned command in a shell, or PUT each part and POST complete to the links. The build is then checked and ready to run. For AI agents: tool arguments cannot carry a build, so hand the bytes to a shell command. command downloads the command-line tool and uploads the file (parts, then complete). Without it:
params: projectId*, fileName*, size*, label, fingerprint
import_buildFetch a build from an https link (an EAS, Bitrise, S3 or GitHub artifact link, up to the build size limit) into the project; it is checked and ready to run. Nothing to upload from your side. The link must be https to a public host name; up to 3 redirects are followed. headers (optional, at most 5: Authorization or X-… names) are sent to the first host only, for a private artifact store. The file n
params: projectId*, url*, headers, label, fingerprint
complete_build_uploadFinish the upload with every part's etag. The build is checked (app id, version, whether our devices can run it) and returned. Use the returned build.id in run_test {buildId} or run_project {buildIds} to run the new build. Uploading alone does not start a run. The command from create_build_upload completes the upload itself; call this only after uploading parts to the signed links yourself. Also a
params: buildId*, parts*
delete_buildDelete a build. Runs that used it keep their results; a build a test pins cannot be deleted.
params: buildId*

Entries describe changes in tool definitions. They are not statements about a server, its quality or its author. The grade measures how the tool definitions fit model providers (token cost, schema compatibility, confusable names) as scored by the ToolFit engine at the time of the listing. JSON: append .json. Opt-out: how or hello@youraitools.co.