{"name":"io.github.zyf8827/tern","slug":"zyf8827-tern","title":null,"description":"Model Context Protocol (MCP) server for Tern E2E testing platform","url":"https://mcp.market/server/zyf8827-tern","rating":null,"grade":"B","score":71,"certified":false,"status":"active","category":"ai","tags":["ai"],"presence":{"score":18,"stars":0,"forks":0,"downloads_week":47,"last_push_at":"2026-09-24T01:00:14.000Z","license":"Apache-2.0"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":null,"website":null,"version":"0.3.0","remotes":[],"packages":[{"registryType":"npm","identifier":"@zyf8827/tern-mcp","version":"0.3.0","transport":{"type":"stdio"},"environmentVariables":[{"description":"Base URL of the Tern server instance (defaults to http://127.0.0.1:7430)","format":"string","default":"http://127.0.0.1:7430","name":"TERN_URL"},{"description":"API Bearer token for authenticating with the Tern server","format":"string","isSecret":true,"name":"TERN_TOKEN"}]}],"tools":[{"name":"tern_add_project","description":"\\u6DFB\\u52A0\\u4E00\\u4E2A git \\u7528\\u4F8B\\u4ED3\\u5E93\\u4F5C\\u4E3A\\u6D4B\\u8BD5\\u9879\\u76EE\\uFF08\\u81EA\\u52A8 clone + \\u9996\\u6B21\\u540C\\u6B65\\uFF09\\u3002\\u9ED8\\u8BA4 HTTP \\u534F\\u8BAE\\uFF0C\\u53EF\\u7528\\u8D26\\u53F7\\u5BC6\\u7801\\uFF1BSSH \\u5FC5\\u987B\\u63D0\\u4F9B\\u79C1\\u94A5 PEM\\uFF08\\u8FD0\\u884C\\u5728\\u5BB9\\u5668\\u5185\\uFF0C\\u4E0D\\u4F1A\\u4F7F\\u7528\\u5BBF\\u4E3B\\u673A\\u5BC6\\u94A5\\uFF09\\u3002\\u4ED3\\u5E93","write_action":false,"price_micros":0,"input_schema":null},{"name":"tern_cancel_run","description":"\\u7ED3\\u675F\\u4E00\\u6B21\\u6D4B\\u8BD5\\u8FD0\\u884C\\u3002\\u9ED8\\u8BA4\\u5F3A\\u5236\\u7ED3\\u675F\\uFF1A\\u8FD0\\u884C\\u7ACB\\u5373\\u6536\\u655B\\u4E3A cancelled\\uFF08\\u4E0D\\u7B49 worker \\u56DE\\u6267\\uFF09\\uFF0C\\u4E2D\\u65AD worker \\u4E0A\\u8BE5\\u7528\\u4F8B\\u7684\\u5168\\u90E8\\u9636\\u6BB5\\uFF08\\u542B\\u5C1A\\u672A\\u5F00\\u59CB\\u6267\\u884C/\\u767B\\u5F55\\u4E2D\\u7684\\u6761\\u76EE\\uFF09\\uFF0Cworker \\u4E0D\\u5728\\u7EBF\\u65F6","write_action":true,"price_micros":0,"input_schema":null},{"name":"tern_create_suite","description":"\\u521B\\u5EFA\\u6D4B\\u8BD5\\u96C6\\uFF08\\u9879\\u76EE\\u5185\\u53EF\\u547D\\u540D\\u590D\\u7528\\u7684\\u7528\\u4F8B\\u9009\\u62E9 + \\u6267\\u884C\\u524D\\u63D0\\u7ED1\\u5B9A\\uFF09\\u3002\\u9009\\u62E9\\u5668 = \\u7B5B\\u9009\\u6761\\u4EF6 + \\u663E\\u5F0F\\u5305\\u542B/\\u6392\\u9664\\uFF08\\u6392\\u9664\\u4F18\\u5148\\uFF09\\uFF1B\\u7A7A\\u9009\\u62E9\\u5668 = \\u9879\\u76EE\\u5168\\u91CF\\u3002env/account \\u662F\\u8FD0\\u884C\\u8BE5\\u96C6\\u65F6\\u7","write_action":true,"price_micros":0,"input_schema":null},{"name":"tern_delete_run","description":"\\u5220\\u9664\\u4E00\\u6B21\\u6D4B\\u8BD5\\u8FD0\\u884C\\uFF1A\\u7EA7\\u8054\\u5220\\u9664\\u6267\\u884C\\u8BB0\\u5F55/\\u4E8B\\u4EF6\\uFF0C\\u5E76\\u6E05\\u7406\\u622A\\u56FE\\u3001trace\\u3001\\u65E5\\u5FD7\\u7B49\\u4EA7\\u7269\\u6587\\u4EF6\\uFF08\\u4E0D\\u53EF\\u6062\\u590D\\uFF09\\u3002\\u8FDB\\u884C\\u4E2D\\u7684\\u8FD0\\u884C\\u9700 force=true","write_action":true,"price_micros":0,"input_schema":null},{"name":"tern_delete_suite","description":"\\u5220\\u9664\\u6D4B\\u8BD5\\u96C6\\uFF08\\u5386\\u53F2 run \\u9760 scope \\u5FEB\\u7167\\u4E0D\\u53D7\\u5F71\\u54CD\\uFF1B\\u5F15\\u7528\\u5B83\\u7684\\u5B9A\\u65F6\\u4EFB\\u52A1\\u89E6\\u53D1\\u65F6\\u4F1A\\u660E\\u786E\\u62A5\\u9519\\uFF09","write_action":true,"price_micros":0,"input_schema":null},{"name":"tern_get_case","description":"\\u83B7\\u53D6\\u5355\\u4E2A\\u7528\\u4F8B\\u7684\\u5143\\u6570\\u636E\\u3001\\u5B8C\\u6574\\u6E90\\u7801\\u4E0E\\u6700\\u8FD1\\u6267\\u884C\\u8BB0\\u5F55","write_action":false,"price_micros":0,"input_schema":null},{"name":"tern_get_execution","description":"\\u67E5\\u8BE2\\u5355\\u6761\\u7528\\u4F8B\\u67D0\\u6B21\\u6267\\u884C\\u7684\\u8BE6\\u60C5\\uFF1A\\u9519\\u8BEF\\u3001\\u65E5\\u5FD7\\u5C3E\\u90E8\\u3001\\u4EA7\\u7269\\u6E05\\u5355\\uFF08\\u622A\\u56FE/trace URL\\uFF09","write_action":false,"price_micros":0,"input_schema":null},{"name":"tern_get_failure_summary","description":"\\u83B7\\u53D6\\u4E00\\u6B21\\u8FD0\\u884C\\u7684\\u5931\\u8D25\\u6458\\u8981\\uFF1A\\u6309\\u9519\\u8BEF\\u7B7E\\u540D\\u805A\\u7C7B\\u5206\\u7EC4\\uFF08\\u540C\\u7B7E\\u540D = \\u540C\\u7C7B\\u5931\\u8D25\\uFF09\\uFF0C\\u6BCF\\u7EC4\\u542B\\u4EE3\\u8868\\u6027\\u7528\\u4F8B\\u3001\\u622A\\u56FE URL\\u3001\\u65E5\\u5FD7\\u5C3E\\u90E8\\u4E0E\\u8DE8 run \\u5386\\u53F2\\uFF08\\u9996\\u89C1/\\u51FA\\u73B0\\u6B21\\u6570\\uFF09\\u3002\\u8BCA\\u65AD\\u6279\\u91CF\\u5","write_action":false,"price_micros":0,"input_schema":null},{"name":"tern_get_run","description":"\\u67E5\\u8BE2\\u4E00\\u6B21\\u6D4B\\u8BD5\\u8FD0\\u884C\\u7684\\u72B6\\u6001\\u4E0E\\u9010\\u7528\\u4F8B\\u7ED3\\u679C\\u3002runId \\u4E0D\\u4F20\\u65F6\\u8FD4\\u56DE\\u6700\\u8FD1\\u4E00\\u6B21\\u8FD0\\u884C","write_action":true,"price_micros":0,"input_schema":null},{"name":"tern_get_screenshot","description":"\\u83B7\\u53D6\\u67D0\\u6B21\\u7528\\u4F8B\\u6267\\u884C\\u7684\\u5931\\u8D25\\u622A\\u56FE\\uFF0C\\u4EE5\\u56FE\\u7247\\u8FD4\\u56DE\\uFF08\\u591A\\u6A21\\u6001\\u6A21\\u578B\\u53EF\\u76F4\\u63A5\\u67E5\\u770B\\u5931\\u8D25\\u73B0\\u573A\\uFF09","write_action":false,"price_micros":0,"input_schema":null},{"name":"tern_get_suite","description":"\\u83B7\\u53D6\\u5355\\u4E2A\\u6D4B\\u8BD5\\u96C6\\u8BE6\\u60C5\\uFF1A\\u9009\\u62E9\\u5668\\u3001\\u73AF\\u5883/\\u8D26\\u53F7\\u7ED1\\u5B9A\\u3001\\u5065\\u5EB7\\u5EA6\\u4E0E\\u547D\\u4E2D\\u6570","write_action":false,"price_micros":0,"input_schema":null},{"name":"tern_list_cases","description":"\\u67E5\\u8BE2\\u6D4B\\u8BD5\\u7528\\u4F8B\\u5217\\u8868\\uFF08\\u9ED8\\u8BA4\\u4E00\\u9875 20 \\u6761\\uFF09\\u3002\\u53EF\\u7528 project / version / module / tags\\uFF08tagMode any=\\u4EFB\\u4E00\\u547D\\u4E2D, all=\\u5168\\u90E8\\u547D\\u4E2D\\uFF09/ excludeTags / \\u5173\\u952E\\u5B57\\u591A\\u7EF4\\u5EA6\\u8FC7\\u6EE4","write_action":false,"price_micros":0,"input_schema":null},{"name":"tern_list_environments","description":"\\u5217\\u51FA\\u9879\\u76EE\\u73AF\\u5883\\u4E0E\\u53D8\\u91CF\\u6E05\\u5355\\uFF08\\u6E05\\u5355\\u6765\\u81EA\\u7528\\u4F8B\\u4ED3\\u5E93 tern.yaml \\u7684 env.variables\\uFF1B\\u73AF\\u5883\\u503C\\u5728\\u5E73\\u53F0\\u914D\\u7F6E\\uFF0Csecret \\u4E0D\\u56DE\\u663E\\uFF09\\u3002\\u53D1\\u8D77\\u8FD0\\u884C\\u524D\\u53EF\\u7528\\u5B83\\u786E\\u8BA4\\u73AF\\u5883\\u662F\\u5426\\u914D\\u9F50","write_action":false,"price_micros":0,"input_schema":null},{"name":"tern_list_projects","description":"\\u5217\\u51FA\\u5E73\\u53F0\\u4E0A\\u7684\\u6240\\u6709\\u6D4B\\u8BD5\\u9879\\u76EE\\uFF08\\u7528\\u4F8B git/local \\u4ED3\\u5E93\\uFF09\\u53CA\\u7528\\u4F8B\\u6570\\u91CF\\u3001\\u6700\\u8FD1\\u540C\\u6B65\\u72B6\\u6001\\u3001git \\u8BA4\\u8BC1\\u6458\\u8981\\uFF08secret \\u4E0D\\u56DE\\u663E\\uFF09","write_action":false,"price_micros":0,"input_schema":null},{"name":"tern_list_runs","description":"\\u5206\\u9875\\u5217\\u51FA\\u6D4B\\u8BD5\\u8FD0\\u884C\\uFF08\\u9ED8\\u8BA4\\u4E00\\u9875 20 \\u6761\\uFF09\\uFF0C\\u53EF\\u6309 status / project / env / createdBy / workerId / \\u5173\\u952E\\u5B57 / \\u521B\\u5EFA\\u65F6\\u95F4\\u7B5B\\u9009","write_action":false,"price_micros":0,"input_schema":null},{"name":"tern_list_schedules","description":"\\u5217\\u51FA\\u5B9A\\u65F6\\u4EFB\\u52A1\\uFF08cron\\u3001\\u73AF\\u5883\\u3001\\u4E0B\\u6B21\\u89E6\\u53D1\\u65F6\\u95F4\\u3001\\u6700\\u8FD1\\u4E00\\u6B21\\u8FD0\\u884C\\uFF09","write_action":false,"price_micros":0,"input_schema":null},{"name":"tern_list_suites","description":"\\u5217\\u51FA\\u9879\\u76EE\\u6D4B\\u8BD5\\u96C6\\uFF1A\\u53EF\\u547D\\u540D\\u590D\\u7528\\u7684\\u7528\\u4F8B\\u9009\\u62E9 + \\u73AF\\u5883/\\u8D26\\u53F7\\u7ED1\\u5B9A\\u3002\\u8FD4\\u56DE\\u547D\\u4E2D\\u6570\\u4E0E\\u5065\\u5EB7\\u5EA6\\uFF08\\u60AC\\u7A7A\\u5F15\\u7528/\\u7A7A\\u96C6/\\u73AF\\u5883\\u7F3A\\u503C\\uFF09\\u2014\\u2014\\u53D1\\u8D77\\u8FD0\\u884C\\u524D\\u9009\\u96C6\\u7684\\u4E3B\\u5165\\u53E3","write_action":false,"price_micros":0,"input_schema":null},{"name":"tern_list_workers","description":"\\u5217\\u51FA\\u6240\\u6709\\u6267\\u884C Worker \\u53CA\\u5176\\u72B6\\u6001","write_action":false,"price_micros":0,"input_schema":null},{"name":"tern_preview_run","description":"run \\u521B\\u5EFA dry-run \\u9884\\u89C8\\uFF08\\u4E0D\\u6267\\u884C\\u4E0D\\u843D\\u5E93\\uFF09\\uFF1A\\u4E0E tern_run_cases \\u540C\\u53C2\\uFF0C\\u8FD4\\u56DE\\u53BB\\u91CD\\u540E\\u7684\\u6761\\u76EE\\u603B\\u6570\\u3001\\u6309\\u73AF\\u5883\\u5206\\u7EC4\\u7684\\u547D\\u4E2D\\u6784\\u6210\\uFF08\\u6BCF\\u7EC4\\u7684\\u6765\\u6E90\\u6D4B\\u8BD5\\u96C6\\u4E0E\\u6761\\u6570\\uFF09\\u3001\\u5404\\u6D4B\\u8BD5\\u96C6\\u547D\\u4E2D\\u6570\\u4E0E\\u53BB\\u91C","write_action":true,"price_micros":0,"input_schema":null},{"name":"tern_rerun","description":"\\u91CD\\u8DD1\\u67D0\\u6B21\\u6D4B\\u8BD5\\u8FD0\\u884C\\u7684\\u5168\\u90E8\\u7528\\u4F8B\\uFF08\\u6CBF\\u7528\\u6E90\\u8FD0\\u884C\\u7684\\u73AF\\u5883/\\u53C2\\u6570/worker/trace \\u9009\\u9879\\uFF09\\uFF1B\\u53EA\\u590D\\u8DD1\\u5931\\u8D25\\u7528\\u4F8B\\u7528 tern_retry_failed","write_action":false,"price_micros":0,"input_schema":null},{"name":"tern_resync_cases","description":"\\u5168\\u91CF\\u66F4\\u65B0\\u5E76\\u91CD\\u65B0\\u626B\\u63CF\\u6240\\u6709\\u9879\\u76EE\\u7528\\u4F8B\\uFF08git \\u62C9\\u53D6 + \\u91CD\\u626B + lint/\\u6253\\u5305\\u6821\\u9A8C\\uFF09","write_action":false,"price_micros":0,"input_schema":null},{"name":"tern_retry_failed","description":"\\u57FA\\u4E8E\\u67D0\\u6B21\\u6D4B\\u8BD5\\u8FD0\\u884C\\u4E2D\\u5931\\u8D25\\u7684\\u7528\\u4F8B\\u521B\\u5EFA\\u65B0\\u8FD0\\u884C\\u5E76\\u6267\\u884C\\uFF08\\u4FEE\\u590D\\u540E\\u9A8C\\u8BC1\\u7684\\u6807\\u51C6\\u52A8\\u4F5C\\uFF09","write_action":false,"price_micros":0,"input_schema":null},{"name":"tern_run_cases","description":"","write_action":true,"price_micros":0,"input_schema":null},{"name":"tern_set_case_quarantine","description":"\\u624B\\u52A8\\u9694\\u79BB/\\u89E3\\u9664\\u9694\\u79BB\\u4E00\\u6761\\u7528\\u4F8B\\uFF08flaky \\u6CBB\\u7406\\uFF09\\u3002\\u9694\\u79BB\\u7684\\u7528\\u4F8B\\u9ED8\\u8BA4\\u4E0D\\u53C2\\u4E0E\\u65B0\\u5EFA\\u8FD0\\u884C\\uFF0C\\u4F46\\u4ECD\\u53EF\\u663E\\u5F0F caseIds \\u70B9\\u540D\\u6267\\u884C\\uFF1B\\u624B\\u52A8\\u8BBE\\u7F6E\\u4F18\\u5148\\u4E8E\\u81EA\\u52A8\\u89C4\\u5219","write_action":false,"price_micros":0,"input_schema":null},{"name":"tern_sync_project","description":"\\u5F3A\\u5236\\u66F4\\u65B0\\u4E00\\u4E2A\\u9879\\u76EE\\uFF1Agit \\u4ED3\\u5E93\\u4F1A fetch + reset --hard + clean -fdx\\uFF08\\u4E22\\u5F03\\u4E00\\u5207\\u672C\\u5730\\u4FEE\\u6539\\uFF09\\u540E\\u91CD\\u65B0\\u626B\\u63CF\\u7528\\u4F8B\\u3002\\u5199\\u5B8C\\u7528\\u4F8B push \\u4E4B\\u540E\\u8C03\\u7528\\u5B83\\u8BA9\\u5E73\\u53F0\\u751F\\u6548","write_action":false,"price_micros":0,"input_schema":null},{"name":"tern_update_suite","description":"\\u66F4\\u65B0\\u6D4B\\u8BD5\\u96C6\\uFF08\\u53EA\\u6539\\u63D0\\u4F9B\\u7684\\u5B57\\u6BB5\\uFF1B\\u6539\\u540D\\u4F1A\\u8054\\u52A8\\u5F15\\u7528\\u5B83\\u7684\\u5B9A\\u65F6\\u4EFB\\u52A1\\uFF09","write_action":true,"price_micros":0,"input_schema":null},{"name":"tern_wait_run","description":"\\u963B\\u585E\\u7B49\\u5F85\\u6D4B\\u8BD5\\u8FD0\\u884C\\u7ED3\\u675F\\u5E76\\u8FD4\\u56DE\\u6700\\u7EC8\\u7EDF\\u8BA1","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":71,"grade":"B","scanned_at":"2026-11-02T15:58:49.946Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-11-02T15:58:49.886Z","components":{"code":{"score":20,"max":25,"notes":["2 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":12,"max":15,"notes":["last push 40 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"exec.eval","severity":"medium","component":"code","title":"eval / new Function used","evidence":"tern-mcp.mjs: …&&(l=this.opts.code.process(l,t));let f=new Function(`${kn.default.self}`,`${kn.default.scope…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"@zyf8827/tern-mcp","version":"0.3.0","found":true,"license":"Apache-2.0","hasInstallScripts":false,"dependencyCount":0,"publishedAt":"2026-09-22T15:34:52.204Z","repositoryUrl":"git+https://github.com/zyf8827/tern.git","weeklyDownloads":47}],"repo":{"found":true,"owner":"zyf8827","repo":"tern","archived":false,"pushedAt":"2026-09-24T01:00:14Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/5118661?v=4","ownerCreatedAt":"2013-07-30T06:02:45Z","license":"Apache-2.0"},"icon":{"url":"https://avatars.githubusercontent.com/u/5118661?v=4&s=128","source":"github"},"presence":{"stars":0,"forks":0,"downloadsWeek":47,"license":"Apache-2.0","lastPushAt":"2026-09-24T01:00:14.000Z","score":18}}}},"grade_history":[{"kind":"restore","fromGrade":"D","toGrade":"B","reason":"score 71: eval / new Function used","createdAt":"2026-11-02T15:58:50.581Z"}],"reviews":[]}