{"audit":{"version":"1.5","generated_at":"2026-10-13T08:58:28.478100+00:00","generated_by":"Agenstry","report_url":"https://agenstry.com/agents/mcp.letsship.ai","methodology_url":"https://agenstry.com/methodology","verifier_jwks_url":"https://agenstry.com/.well-known/jwks.json","subject":{"domain":"mcp.letsship.ai","name":"SHIP","url":"https://mcp.letsship.ai/.well-known/agent-card.json"}},"identity":{"provider":{"organization":"SHIP","url":"https://letsship.ai"},"registry_verification":null,"signature":{"signed":false,"signature_valid":null}},"protocol":{"version":"1.0","supports_streaming":false,"supports_push_notifications":false},"operational":{"live_state":"auth_required","live_responds":false,"last_status_code":200,"last_elapsed_ms":19,"last_error":null},"track_record":{"first_seen":"2026-10-12T04:03:51.581941+00:00","last_checked":"2026-10-13T05:00:55.879498+00:00","last_seen_ok":"2026-10-13T05:00:55.879498+00:00","checks_total":6,"checks_ok":6,"uptime_pct":100.0,"uptime_window_days":30,"uptime_probes":4,"archived":false,"archived_reason":null},"conformance":{"score":58,"grade":"D","summary":"D-grade: significant issues, auth-gated, partially broken, or stale.","criteria":[{"key":"valid_card","label":"Valid AgentCard","points":10,"max_points":10,"status":"pass","detail":"Parseable AgentCard returned by the well-known endpoint (Agenstry readiness signal; not an official TCK certification)."},{"key":"live_responds","label":"Live JSON-RPC","points":15,"max_points":25,"status":"partial","detail":"Endpoint requires auth, real agent but not anonymously callable."},{"key":"protocol_version","label":"Protocol version","points":10,"max_points":10,"status":"pass","detail":"Declares A2A 1.0 with supportedInterfaces[] (current v1 card shape)."},{"key":"signature","label":"JWS signature","points":0,"max_points":10,"status":"info","detail":"Card is unsigned (most published agents are)."},{"key":"uptime","label":"Uptime track record","points":0,"max_points":15,"status":"info","detail":"Only 4 probes so far, need ≥5 for an uptime grade."},{"key":"skills","label":"Skill declaration","points":10,"max_points":10,"status":"pass","detail":"Declares 6 skills with structured metadata."},{"key":"verified_identity","label":"Verified Identity","points":5,"max_points":10,"status":"partial","detail":"Provider declared: SHIP (https://letsship.ai). Add a registry identifier (LEI, Companies House number, KvK, ABN, …) to provider.legalEntity for full verified-business credit."},{"key":"freshness","label":"Freshness + modern flags","points":4,"max_points":5,"status":"pass","detail":"seen in upstream source within 0d"},{"key":"security","label":"Security declaration","points":4,"max_points":5,"status":"pass","detail":"Declares OAuth2 with PKCE (S256): secure auth flow."}]},"card_read":{"findings":[],"clean":true,"source_url":"https://mcp.letsship.ai/.well-known/agent-card.json"},"skills":[{"id":"create-mission","name":"Turn a task into a pull request","description":"Creates a mission from a task description. SHIP opens an issue in the project's tracker. Then its agents plan, build, review and test the change in the project's repository and open a pull request. The first line of the message is the issue title, and the full text is the issue body. Needs the missions:run scope.","tags":["coding","pull-request","code-review","testing"],"examples":["Add a rate limit of 60 requests a minute to the public search endpoint.\nReturn 429 with a Retry-After header when a client goes over the limit.","Fix the date picker so that it keeps the selected date when the user changes the month."],"inputModes":[],"outputModes":[]},{"id":"start-issue","name":"Hand over an existing issue","description":"Starts a mission for an issue that is already in the project's tracker. Put the issue id in the message metadata as issueId, for example SHIP-412. Needs the missions:run scope.","tags":["issue","tracker","delegation"],"examples":["Start the issue in the metadata. Metadata: {\"issueId\": \"SHIP-412\"}"],"inputModes":[],"outputModes":[]},{"id":"review-pull-request","name":"Review and test a pull request","description":"Gives an open pull request to SHIP's reviewer, or to its QA agent, with no planning or building stage first. Set metadata.startAt to reviewer or qa, and metadata.prNumber to the pull request number. The mission takes the title of the pull request, and the message text becomes the issue body. Needs the missions:run scope.","tags":["code-review","testing","pull-request"],"examples":["Review and test pull request 128. Metadata: {\"startAt\": \"reviewer\", \"prNumber\": 128}"],"inputModes":[],"outputModes":[]},{"id":"send-instruction","name":"Send a change request to a task","description":"Send a message with the taskId of an open task. By default the message asks the builder to change the open pull request. Set metadata.kind to note to record context for the next agent without a new run. Needs the missions:write scope.","tags":["feedback","change-request"],"examples":["Keep the current Node compatibility. Override nopt instead of narrowing the supported range."],"inputModes":[],"outputModes":[]},{"id":"track-task","name":"Report the status and results of a task","description":"GetTask returns the state of a task, its pull request, the plan, the review and acceptance-test verdicts and the proof that QA captured. ListTasks lists the tasks of a project, newest update first. Needs the missions:read scope, and artifacts:read for the proof.","tags":["status","verdict","artifacts"],"examples":["What is the state of my last task, and did its tests pass?"],"inputModes":[],"outputModes":[]},{"id":"stop-task","name":"Stop a task","description":"CancelTask stops the mission. SHIP stops its agents, and the pull request stays open. Needs the missions:write scope.","tags":["control"],"examples":["Stop the task."],"inputModes":[],"outputModes":[]}],"provenance":[{"source":"a2aregistry","first_seen":"2026-10-12T04:03:51.581941+00:00"},{"source":"registry","first_seen":"2026-10-12T05:28:06.967930+00:00"}],"recent_probes":[{"fetched_at":"2026-10-13T05:00:55.879498+00:00","ok":true,"status_code":200,"error":null,"elapsed_ms":19,"live_responds":false},{"fetched_at":"2026-10-13T02:36:14.873224+00:00","ok":true,"status_code":200,"error":null,"elapsed_ms":118,"live_responds":false},{"fetched_at":"2026-10-12T23:09:31.119012+00:00","ok":true,"status_code":200,"error":null,"elapsed_ms":22,"live_responds":false},{"fetched_at":"2026-10-12T05:28:06.967930+00:00","ok":true,"status_code":200,"error":null,"elapsed_ms":24,"live_responds":false}],"catalog_attestation":null,"operator_revenue_evidence":{"evidence_class":"operator_submitted","authenticity":{"rung":"no_operator_evidence","rank":0,"why":"No verifiable operator evidence has been submitted for this agent.","thresholds":{"min_independent_payers":3,"min_verified_usd":25.0},"engine_table":"agent_authenticity","merge_rule":"max(existing_rank, rank)"},"metric_metadata":{"provenance":"operator_submitted_evidence","confidence":"attested","coverage":{"numerator":0},"as_of":"2026-10-13T08:58:28.676481+00:00","definition":"Revenue proofs submitted by the verified owner and re-checked by Agenstry against the settlement chain or the operator's own Stripe account. Only independently confirmed proofs are counted."},"counts":{"retained":0,"verified":0,"unverifiable":0},"verified":{"gross_usd":0.0,"transactions":0,"independent_payers":0},"detail_url":"https://agenstry.com/api/agents/mcp.letsship.ai/evidence","dispute_url":"https://agenstry.com/agents/mcp.letsship.ai/dispute"},"verification_history":[],"signatures":[{"protected":"eyJhbGciOiJFUzI1NiIsImprdSI6Imh0dHBzOi8vYWdlbnN0cnkuY29tLy53ZWxsLWtub3duL2p3a3MuanNvbiIsImtpZCI6ImFnZW50ZmluZGVyLWVzMjU2LTEiLCJ0eXAiOiJKT1NFIn0","signature":"StlY1pMqE9vHk5jb05SPSaI38dWhY_NKvhSG3krmaJ7epNmUsjXqEVlTEBBztG5nY5zcaIxlxDwvNYPS3oNYWw"}]}