HasData YouTube

com.hasdata由 hasdata.com 發布官方發布者v1.0.9更新於 Nov 2, 2026

Search YouTube and read video, channel and transcript data as JSON. No Google Cloud project.

發布方自己的服務:HasData Airbnb

已驗證Streamable HTTP可網頁執行網頁搜尋與抓取媒體與設計

概覽

AI 產生的概覽

由 HasData 託管的 MCP 伺服器,讓助理搜尋 YouTube 並以 JSON 讀取公開的影片、頻道與字幕資料,不需 Google Cloud 專案。

可以做什麼
  • 依排序、上傳時間、長度、內容類型與特性篩選搜尋 YouTube,並支援翻頁
  • 依影片 ID 讀取觀看數據、說明、標籤、字幕軌與相關影片
  • 讀取頻道資訊,並逐一檢視影片、短影音、直播、播放清單、簡介等分頁
  • 取得含時間軸的字幕,並列出可用的語言軌
  • 使用兩個內建提示詞,並以資源形式讀取固定選項的參數清單
適用情境
適合需要進行 YouTube 調查的情況:尋找某主題的影片、依字幕摘要影片內容,或盤點某頻道的上傳內容,且不想設定 Google 憑證。它只讀取未登入即可看到的公開資料,不適用於上傳、留言、頻道管理或私人分析數據。
執行需求
需要 HasData API 金鑰:遠端端點以 x-api-key 標頭傳送,npm 或 PyPI 的 stdio 啟動器則透過 HASDATA_API_KEY 環境變數提供。用戶端需支援可自訂標頭的 streamable HTTP,或具備 Node.js(npx)或 uvx 以執行啟動器。需要能連線至 HasData 端點。
安裝前請注意
每次成功呼叫消耗 10 點額度;免費方案為每月 1,000 點(100 次呼叫),付費方案每月 59 美元起,無人看管或大量翻頁的代理會很快用完額度。API 金鑰屬機密,不要寫進共用設定檔,支援時優先採用 OAuth 登入。金鑰錯誤不會在連線時顯示,只在第一次工具呼叫時報錯。所有工具皆為唯讀,僅存取公開資料。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 HasData YouTube,將其新增到工作區。
  2. 連接 x-api-key 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
  3. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/com.hasdata%2Fyoutube/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "hasdata-youtube": {
      "type": "http",
      "url": "https://mcp.hasdata.com/mcp?apis=youtube",
      "headers": {
        "x-api-key": "<YOUR_API_KEY>"
      }
    }
  }
}

README

YouTube MCP Server

A hosted YouTube MCP server that gives Claude, Cursor, Windsurf and any other MCP client four read-only YouTube tools. Search YouTube, read video and channel data, and pull transcripts, with no Google Cloud project and no YouTube Data API key.

1,000 free credits every month, no card required, which is 100 YouTube calls.

https://mcp.hasdata.com/mcp?apis=youtube

[Glama score] [tool contract] [MCP] [Tools]

Contents

What you need

An MCP client that speaks streamable HTTP with custom headers. A HasData API key from the dashboard, free to create. Nothing else. This is a remote server, so the simplest path is a URL and a header, with no container to run and no Google account anywhere in the flow. A stdio-only client can use the @hasdata/youtube-mcp (npm) or hasdata-youtube-mcp (PyPI) launcher instead.

Quick start

The server URL is the same for every client. We run it hands-on in Claude Code and Claude Desktop. The other blocks follow each client's own documented format for a remote server.

FieldValue
URLhttps://mcp.hasdata.com/mcp?apis=youtube
TransportHTTP, streamable
Auth headerx-api-key: HASDATA_API_KEY

Clients with OAuth support can add the same URL as a connector and sign in without putting a key in a config file.

Claude Code
bash
claude mcp add --transport http youtube "https://mcp.hasdata.com/mcp?apis=youtube" \  --header "x-api-key: HASDATA_API_KEY"
Claude Desktop

Settings, then Connectors, then Add custom connector, then paste https://mcp.hasdata.com/mcp?apis=youtube and sign in.

For the config-file route, Claude Desktop loads only local (stdio) servers, so it reaches a remote server through a stdio launcher. The @hasdata/youtube-mcp package is that launcher, and it reads the key from the environment. Add this to claude_desktop_config.json:

json
{  "mcpServers": {    "youtube": {      "command": "npx",      "args": ["-y", "@hasdata/youtube-mcp"],      "env": { "HASDATA_API_KEY": "YOUR_KEY" }    }  }}

Python instead of Node? Swap the launcher for the PyPI package, which uvx runs without a manual install:

json
{  "mcpServers": {    "youtube": {      "command": "uvx",      "args": ["hasdata-youtube-mcp"],      "env": { "HASDATA_API_KEY": "YOUR_KEY" }    }  }}
Cursor

~/.cursor/mcp.json for every project, or .cursor/mcp.json for one:

json
{  "mcpServers": {    "youtube": {      "url": "https://mcp.hasdata.com/mcp?apis=youtube",      "headers": { "x-api-key": "HASDATA_API_KEY" }    }  }}
Windsurf

~/.codeium/windsurf/mcp_config.json. Windsurf calls the field serverUrl, not url:

json
{  "mcpServers": {    "youtube": {      "serverUrl": "https://mcp.hasdata.com/mcp?apis=youtube",      "headers": { "x-api-key": "HASDATA_API_KEY" }    }  }}
Cline
json
{  "mcpServers": {    "youtube": {      "url": "https://mcp.hasdata.com/mcp?apis=youtube",      "type": "streamableHttp",      "headers": { "x-api-key": "HASDATA_API_KEY" },      "disabled": false    }  }}
VS Code

.vscode/mcp.json in the workspace:

json
{  "servers": {    "youtube": {      "type": "http",      "url": "https://mcp.hasdata.com/mcp?apis=youtube",      "headers": { "x-api-key": "HASDATA_API_KEY" }    }  }}
Codex CLI

~/.codex/config.toml:

toml
[mcp_servers.youtube]url = "https://mcp.hasdata.com/mcp?apis=youtube"
[mcp_servers.youtube.headers]"x-api-key" = "HASDATA_API_KEY"
Gemini CLI

~/.gemini/settings.json:

json
{  "mcpServers": {    "youtube": {      "httpUrl": "https://mcp.hasdata.com/mcp?apis=youtube",      "headers": { "x-api-key": "HASDATA_API_KEY" }    }  }}

Example prompts

Prompts, not code. Paste one in and the agent picks the tool itself. Each is annotated with the calls it takes, because in MCP the model decides how many calls to make and every successful call costs 10 credits.

Find the ten most viewed videos about the Model Context Protocol from the last month, then pull the transcript of the top one and give me the three claims it makes about tool calling.

Two calls, 20 credits.

Take the channel @GoogleDevelopers. List the tabs it publishes, then summarize the last five uploads and tell me which topics repeat.

Two calls, 20 credits. Reading a tab you have not seen takes a second call, because the tab list arrives inside the first response.

Take this video id, dQw4w9WgXcQ. Get its stats, then check which of its related videos come from the same channel.

One call, 10 credits. Related videos ride along in the same response.

Search YouTube for "web scraping tutorial", sorted by upload date, videos under four minutes only, and give me the chapter titles of each result that has them.

One call, 10 credits.

Pull the German transcript of this video if one exists, and tell me which languages it is available in.

One call, 10 credits.

Search takes YouTube's own filter tokens, and an agent narrows by duration, upload date and content type without post-processing. Transcripts arrive with the list of available language tracks, which lets the agent pick one without guessing.

Paging costs a call each time. A research prompt that searches, pages twice, then pulls three transcripts is six calls and 60 credits. The free tier goes further on narrow questions than on open-ended crawls.

Tools

ToolWhat it returns
hasdata_youtube_channel_getYoutubeChannelChannel identity (title, description, avatar, banner, country, join date), subscriber and total-view counts, social links, and the items on the requested tab (videos…. 10 credits a call
hasdata_youtube_search_getYoutubeSearchResultsSearches YouTube for a query and returns the full results page split into videoResults (videoId, title, views, length, publish date, chapters, channel info, extensions…. 10 credits a call
hasdata_youtube_transcript_getYoutubeTranscriptThe timed transcript (subtitles) of a YouTube video by its 11-character videoId. 10 credits a call
hasdata_youtube_video_getYoutubeVideoTitle, thumbnail, raw + normalized views and likes, lengthSeconds, publish date, category, keywords/tags, isFamilySafe / isUnlisted flags, the uploading channel…. 10 credits a call

Four tools, all read-only. Samples below are trimmed from real calls, and the numbers in them move as YouTube updates. Read them as shapes. Each tool name links to its endpoint reference, which carries the full field list.

The samples are the payload, not the whole response. A tools/call result carries one text block, and that text is itself JSON holding url, status, text and json, with the scraped data under json. From a raw JSON-RPC response the path is result.content[0].text, parsed, then .json. A chat client unwraps that for you and code talking to the endpoint directly does not.

Get YouTube search results

hasdata_youtube_search_getYoutubeSearchResults

Searches YouTube and returns the whole results page, split by result type.

ParameterTypeRequiredNotes
qstringyesFree-text query, exactly as a user would type it
sortBystringrelevance by default, plus date, views, rating and popularity
datestringUpload window relative to now
lengthstringDuration bucket, for example under4
videoTypestringRestrict to one content type
filters__arrayFeature flags, combinable
spstringRaw YouTube sp token copied from a search URL. Overrides sortBy, date, videoType, length and filters__ with no warning, so leave those empty when you pass a token
paginationTokenstringThe pagination.nextPageToken from the previous response
gl / hl / deviceTypestringTwo-letter country and language codes, and device

A results page is split across videoResults, shortsResults, inlineShortsResults, playlistResults, channelResults and shelves, with paid placements in adsResults and sponsoredResults. Which blocks appear depends on the query, and a block with nothing to report is absent, not empty. Test for the key before iterating. searchInformation carries the total and pagination.nextPageToken is what you feed back as paginationToken. Ads never mix into the organic arrays, though there are two of them to skip.

json
{  "positionOnPage": 1,  "videoId": "GuTcle5edjk",  "title": "you need to learn MCP RIGHT NOW!! (Model Context Protocol)",  "viewsOriginal": "1.6M views",  "views": 1653824,  "length": "38:40",  "publishedDate": "11 months ago",  "extensions": ["4K"],  "chapters": [    { "title": "Intro", "time": "0:00" },    { "title": "Problem: LLMs Suck at Accessing Code", "time": "0:40" }  ],  "channel": { "name": "NetworkChuck", "verified": true }}

Two things there earn a mention. views is a parsed integer next to the 1.6M views display string and needs no suffix parser. And chapters come back inside search results, not only on the video itself, though only some videos carry them.

The search endpoint reference lists every sp and filters__ token the endpoint accepts.

Get YouTube video data

hasdata_youtube_video_getYoutubeVideo

One video by id.

ParameterTypeRequiredNotes
vstringyesThe 11-character video id from v=
gl / hl / deviceTypestringTwo-letter country and language codes, and device

Returns title, thumbnail, channel, publishedDate, lengthSeconds, category, isFamilySafe and isUnlisted, plus the relatedVideos, endScreenVideos, keywords, captions, music and socialLinks arrays. description is an object holding the full text in content and a links array where every link and hashtag carries startIndex, length, text and url. The text field holds the link as the author wrote it and url holds YouTube's redirect wrapper, which matters if you are pulling sponsor or affiliate destinations out of descriptions.

Read the parsed field by name per tool before you copy the sample below. Search and channel results put the parsed number in views and the display string in viewsOriginal. This response inverts it, keeping the string in views and the number in extractedViews, and the same inversion applies to likes and subscribers. Get it wrong and item.views > 100000 compares a string here without ever throwing.

json
{  "title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)",  "views": "1,806,075,152 views",  "extractedViews": 1806075152,  "likes": "19M",  "extractedLikes": 19344370,  "publishedDate": "Oct 24, 2009",  "lengthSeconds": 214,  "category": "Music",  "channel": { "name": "Rick Astley", "subscribers": "4.53M subscribers", "extractedSubscribers": 4530000 }}

Get YouTube channel data

hasdata_youtube_channel_getYoutubeChannel

A channel by id or handle, one tab at a time.

ParameterTypeRequiredNotes
channelIdstringyesCanonical UC… id or a @handle
tabstringfeatured by default, plus videos, shorts, streams, playlists, posts, community, podcasts, releases, about and store. Take a value from this list, not from availableTabs in the response
paginationTokenstringToken from the previous response
gl / hl / deviceTypestringTwo-letter country and language codes, and device

Returns channelInfo, featuredVideo and sections on the default tab. Other tabs return their own shape. channelInfo carries the handle, avatar, banner, description, channel keywords and the channel's rssUrl, enough to keep watching a channel without polling it.

The availableTabs array in the sample below holds display labels, and they are not the values tab accepts. Home, Live, Courses and Search map to no parameter value at all, and the rest need lowercasing. An agent that reads the list and walks each entry fails on the first one.

json
{  "channelInfo": {    "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw",    "name": "Google for Developers",    "handle": "@GoogleDevelopers",    "rssUrl": "https://www.youtube.com/feeds/videos.xml?channel_id=UC_x5XG1OV2P6uZZ5FSM9Ttw",    "isFamilySafe": true,    "availableTabs": ["Home", "Videos", "Shorts", "Live", "Courses", "Playlists", "Posts", "Search"]  }}

Get YouTube video transcript

hasdata_youtube_transcript_getYoutubeTranscript

The timed transcript of a video.

ParameterTypeRequiredNotes
vstringyesThe 11-character video id
languageCodestringBCP-47 code of the track you want
typestringSet to asr for the auto-generated track

Check selected in the response before you trust the language. Asking for a languageCode the video does not carry neither fails nor returns empty, it quietly falls back to the default track. Every entry in the list carries languageName and languageCode, and one language can appear twice, once human-authored and once with type set to asr.

json
{  "transcript": [    { "startMs": 320, "endMs": 18800, "snippet": "[Music]", "startTimeText": "0:00" },    { "startMs": 18800, "endMs": 21800, "snippet": "We're no strangers to", "startTimeText": "0:18" }  ],  "availableTranscripts": [    { "languageName": "English", "languageCode": "en" },    { "languageName": "English", "languageCode": "en", "type": "asr", "selected": true },    { "languageName": "German (Germany)", "languageCode": "de-DE" },    { "languageName": "Japanese", "languageCode": "ja" }  ]}

Prompts and resources

The server ships 2 prompts, ready-made workflows a client can offer instead of making the user compose a tool call.

PromptWhat it does
youtube_searchFind YouTube videos and channels about a topic.
youtube_transcriptSummarize what is said in a YouTube video.

Alongside them the server exposes 10 resources, one per parameter whose accepted values are a fixed list. Reading one is cheaper than learning the vocabulary from a rejected call, and it costs no credits. Each URI is hasdata://youtube/<parameter>.

ParameterValuesWhat it selects
tab11Channel tab to scrape. Each tab returns a different content shape: - featured (default) — channel Home page (channel trailer + curated rows) - videos — uploaded long-form videos - shorts — Shorts feed - streams — past and upcoming live streams - playlists — created and saved playlists - posts / community — community posts - podcasts — podcast episodes - releases — music releases - about — channel description, links, stats - store — channel merch
gl245The two-letter country code for the country you want to limit the search to.
hl159The two-letter language code for the language you want to use for the search.
deviceType2Device type for the request.
sortBy5Sort order applied to the results page. relevance (default) — best match for the query; date — newest first; views — most viewed first; rating — highest rated first; popularity — trending/most popular.
date5Limit results to videos uploaded within this time window relative to now.
videoType5Restrict results to a single YouTube content type — regular videos, Shorts, channels, playlists, or movies.
length3Filter by video duration bucket: - under4 — under 4 minutes - between420 — 4 to 20 minutes - plus20 — over 20 minutes
filters__11Feature flags to require on results. Multiple values are combined with AND (every flag must apply). - hd — HD quality - k4 — 4K quality - hdr — HDR - subtitles — has subtitles/closed captions - cc — Creative Commons license - d3 — 3D video - d360 — 360° video - vr180 — VR180 video - live — currently live - bought — purchased/paid content - location — has a geographic location tag
type1Set to asr to fetch the YouTube auto-generated (speech-recognition) track. Omit to fetch the human-authored track for languageCode when one exists.

Both lists are served without an API key, so a client can read them before a user has signed up.

Errors and failure paths

Your client almost never sees an HTTP error code from a tool call. The MCP layer answers 200 and puts the failure inside the result, with isError set to true and the reason as text. The agent reads a message where you might expect a status line.

A wrong key surfaces as tool output, not as a failed connection. tools/list accepts any non-empty key and returns all four tools, so the client completes its handshake and shows green. The first tool call then comes back with isError: true and the text HasData API error: 401 Unauthorized. Watch for that string, because nothing earlier in the flow reports the problem.

A missing key is the one real HTTP error. Authorization runs before any tool, and the connection itself fails with 401. CORS headers are present, and a browser client reads the status and not an opaque network failure.

An argument that breaks a tool's schema is rejected before it becomes a scrape. The server answers with isError: true and the text MCP error -32602: Input validation error, naming the offending field. Nothing is fetched and nothing is charged. The message names the field but not the accepted values, so the parameter tables above are the reference.

A call that succeeds and finds nothing is the case that trips people up. It arrives as an ordinary result with requestMetadata.status set to ok and the data key simply missing. Nothing in the body says the result was empty. Test for the field you need, not for an error.

An identifier the platform rejects returns 400 with requestMetadata.status set to error. A channel handle that does not exist is the usual way to see this.

Results that carry data also carry a requestMetadata.id worth quoting in support.

Pricing, free tier and limits

Every YouTube tool costs 10 credits per successful call. Response size does not change the price. A full page of search results costs the same as a page with one video.

The free tier is 1,000 credits every month with no card, which is 100 YouTube calls. It renews with the billing cycle, so a low-volume agent runs on the free tier indefinitely.

Paid plans start at $59 a month for 200,000 credits, which is 20,000 calls. The unit price falls with volume, from $2.95 per 1,000 calls on the entry plan to $1.19 on Basic and $0.83 across the Growth tiers. Current figures live on the pricing page.

Your plan also sets concurrency. The free tier allows 5 requests at a time, Startup 5, Basic 15, and the Growth tiers run from 50 to 500. Handle the overflow case defensively in anything unattended, because an agent that fans out will reach the ceiling before you do.

A request that comes back non-200 is not billed. A successful call that finds nothing is still a call.

Tool selection

The apis query parameter decides which tools your agent sees. Fewer tools means less context spent on tool definitions, and fewer chances for the model to reach for the wrong one.

?apis=youtube                    the four tools in this repo?apis=youtube,google_serp        add Google search?apis=youtube,tiktok,instagram   a social research bundle

The parameter takes provider names like youtube and individual API names like google_maps_search. Misspelled names are ignored. If every name is wrong the request fails with 400, and the body lists both what it did not recognise and every valid value. Drop the parameter and the same endpoint exposes all 57 HasData tools.

How it compares

Against the official YouTube Data API v3:

YouTube Data API v3This server
SetupGoogle Cloud project and an API keyOne key and one URL
Search allowance"default quota allocation of 100 search.list calls" a day, per Google's getting started guideYour plan's credits, 10 per call
Transcripts of videos you do not owncaptions.download "requires the user to have permission to edit the video", per Google's referenceYes, with the language list
Chapters in search resultsNoYes
Views and likes in search resultsAbsent, and a second videos.list call returns them as stringsDisplay string and integer in the same response
CostFree inside the daily quotaPaid past the free tier, 10 credits a call
Writes and private dataUploads, playlists, comments and your own analytics over OAuthRead-only, public data only

The last two rows matter. If the daily quota covers your volume and you own the channel you are querying, the official API is the cheaper answer and you should take it.

Most other YouTube MCP servers do transcripts only. This one also searches, reads videos with their engagement numbers, and walks channel tabs, so an agent runs a whole research pass without a second server.

What this server does not do. No comments, no channel management, no uploads, no analytics, no private data. It reads what a signed-out visitor can see.

FAQ

Is there an official YouTube MCP server?

Google does not publish one. YouTube has no first-party MCP server. Every option is built by somebody else, either around the YouTube Data API v3 or around the public pages. This one is maintained by HasData and reads public pages, which is why it needs no Google credentials.

What is a YouTube MCP server?

A server that exposes YouTube data as tools an AI client can call. The client sends a tool call over the Model Context Protocol, the server fetches the data and returns structured JSON, and the model works with the result and never sees a page of HTML. This one exposes four tools and runs remotely. The client connects to a URL and starts no local process.

Do I need a YouTube API key or a Google Cloud project?

No. The only credential is your HasData key. There is no Google Cloud project to create, no quota form to fill in and no OAuth consent screen, because the tools read public YouTube pages and not the YouTube Data API.

Do I need to host or run anything?

No. This is a remote MCP server on streamable HTTP. Nothing to install, no container to keep warm, no process to restart.

Is the data live or cached?

Live. Each call fetches the page at request time and carries its own requestMetadata.id. Two identical calls are two separate fetches and not a replay of a stored copy. Counters like views and likes track the page, so they move as the page moves.

What happens when YouTube changes its layout?

Nothing on your side. We track the changes and keep the response schema stable, so field names and types stay put. A field with no value is absent from the item, not present and null. Read optional fields with a default.

Can I use this together with other HasData APIs?

Yes. The apis parameter takes a list, and ?apis=youtube,google_serp gives your agent the four YouTube tools plus Google search. Drop the parameter and you get everything.

Can I get a transcript for any video?

Only where the video has one, and availableTranscripts tells you what exists before you ask.

Can I sign in with OAuth instead of pasting a key?

Yes, in clients that support it. Claude Desktop and Cursor can add the endpoint as a connector and sign in. Unattended agents and scripts use the x-api-key header.

Compliance and personal data

HasData accesses publicly available data only. A platform's terms may restrict automated access, and you are responsible for your own compliance. Where the data you collect includes personal information, make sure you have a lawful basis for it under GDPR, CCPA or the equivalent rules in your jurisdiction.

HasData links

Product page and request builderYouTube Scraper API
Server documentationMCP server docs
Every HasData tool in one serverHasData/hasdata-mcp
Client walkthroughsMCP clients and integrations
Everything else we scrapeYouTube Scraper API and 54 more
Plans and credit costsPlans and credit costs
Keys and usageHasData dashboard
Node launcher on npm@hasdata/youtube-mcp
Python launcher on PyPIhasdata-youtube-mcp

Development

This repository is configuration and documentation for a remote server. There is no build step and nothing to containerize.

The tests in test/ assert the tool contract, the part that can break without a commit here. They check that ?apis=youtube returns exactly four tools, that every tool still declares its required parameter, that no name changed, and that the key in use is actually accepted. That last check calls a tool for real and costs 10 credits, which is the price of a canary that can fail for the right reason.

bash
# macOS and LinuxHASDATA_API_KEY=your_key_here npm test
# Windows PowerShell$env:HASDATA_API_KEY="your_key_here"; npm test

The same suite runs in CI on every push and once a week on a schedule, because the upstream tool list can change without anyone touching this repository. A failure means the tool list moved, the key stopped working, or the endpoint was unreachable, and the assertion message says which.

Contributing

Corrections to the tool tables and the response samples are the most useful contribution, because those are the parts that drift. Include the call you made and the response you got. Pull requests from forks run the suite without a key, and the live checks skip instead of going red.

License

MIT. See LICENSE.

來源:README.md,提交 636ce79

工具

0
SourceWeft 尚未讀取此伺服器的工具。

版本歷史

3
  1. v1.0.9最新Sep 24, 2026
  2. v1.0.8Sep 22, 2026
  3. v1.0.7Sep 16, 2026

評分

已滿足適用檢查項的 85%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

其他 Hasdata 整合