NS1 MCP by usefulapi
Read NS1 zones, records, monitors, data feeds and usage; create or update one DNS record.
사용해야 할까요
품질 및 안전성
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"ns1": {
"url": "https://ns1.usefulapi.io/mcp"
}
}
}원격 엔드포인트
https://ns1.usefulapi.io/mcpstreamable-http할 수 있는 일
도구 목록
도구 (18)
🟢ns1_list_zones(limit, after, offset)
List the DNS zones in the account: name, id, TTL/SOA settings, primary/secondary setup, linked zones and tags. If next_page is not null, call again with its after/offset to get more. GET /v1/zones.
입력 스키마
{
"type": "object",
"properties": {
"limit": {
"description": "Maximum items per page, 1-1000. Omit for NS1's default page size.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
},
"after": {
"description": "Continue after this item: pass next_page.after from the previous reply.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"offset": {
"description": "Skip this many items: pass next_page.offset from the previous reply.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢ns1_get_zone(zone, limit, after, offset)
One zone with its settings and its record list (each record: domain, type, TTL, short answers, linked/tier info). Large zones are paged: if next_page is not null, call again with its after/offset to get the next records. TSIG secrets are redacted. GET /v1/zones/{zone}.
입력 스키마
{
"type": "object",
"properties": {
"zone": {
"description": "Zone name, e.g. example.com.",
"type": "string",
"minLength": 1,
"maxLength": 254
},
"limit": {
"description": "Maximum items per page, 1-1000. Omit for NS1's default page size.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
},
"after": {
"description": "Continue after this item: pass next_page.after from the previous reply.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"offset": {
"description": "Skip this many items: pass next_page.offset from the previous reply.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"zone"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢ns1_get_record(zone, domain, type)
One DNS record by zone, domain and type: TTL, answers (with per-answer metadata), filter chain (traffic steering), linked record and region settings. GET /v1/zones/{zone}/{domain}/{type}.
입력 스키마
{
"type": "object",
"properties": {
"zone": {
"description": "Zone name, e.g. example.com.",
"type": "string",
"minLength": 1,
"maxLength": 254
},
"domain": {
"description": "Full record name inside the zone, e.g. www.example.com (or the zone name itself for the apex).",
"type": "string",
"minLength": 1,
"maxLength": 254
},
"type": {
"type": "string",
"pattern": "^[A-Z0-9]{1,12}$",
"description": "Record type, e.g. A, AAAA, CNAME, MX, TXT."
}
},
"required": [
"zone",
"domain",
"type"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢ns1_search(query, type, expand, max)
Search the account's zones and records by name (substring match). Returns matching zones and/or records with their answers when expand is true. GET /v1/search.
입력 스키마
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 2,
"maxLength": 500,
"description": "Text to look for in zone and record names (at least 2 characters)."
},
"type": {
"description": "What to search (default all).",
"type": "string",
"enum": [
"all",
"zone",
"record"
]
},
"expand": {
"description": "Include full record details (default true).",
"type": "boolean"
},
"max": {
"description": "Maximum results, 1-1000.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
}
},
"required": [
"query"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢ns1_list_monitoring_jobs
List the account's NS1 monitoring jobs (health checks that feed traffic steering): id, name, type, regions, frequency, rules, current status, active flag and notify list id. Request header values and credentials are redacted. GET /v1/monitoring/jobs.
입력 스키마
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢ns1_get_monitoring_job(job_id)
One monitoring job by id with its configuration, rules, regions and status. Header values and credentials are redacted. GET /v1/monitoring/jobs/{id}.
입력 스키마
{
"type": "object",
"properties": {
"job_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]+$",
"description": "Monitoring job id (from ns1_list_monitoring_jobs)."
}
},
"required": [
"job_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢ns1_list_notify_lists
List the notifier lists that monitoring alerts are sent to: id, name and the notifier types and labels (email, Slack, PagerDuty, webhook). Notifier settings (webhook URLs, tokens, service keys, addresses) are redacted. GET /v1/lists.
입력 스키마
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢ns1_list_data_sources
List the data sources (connections to third-party monitoring or custom push sources used for traffic steering): id, name, source type, status and their feeds. Connection settings and credentials are redacted. GET /v1/data/sources.
입력 스키마
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢ns1_get_data_source(source_id)
One data source by id with its feeds. Connection settings and credentials are redacted. GET /v1/data/sources/{id}.
입력 스키마
{
"type": "object",
"properties": {
"source_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]+$",
"description": "Data source id (from ns1_list_data_sources)."
}
},
"required": [
"source_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢ns1_list_data_feeds(source_id)
List the feeds of one data source (each feed is one monitored item, e.g. one server's health) with id, name and settings. GET /v1/data/feeds/{source_id}.
입력 스키마
{
"type": "object",
"properties": {
"source_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]+$",
"description": "Data source id."
}
},
"required": [
"source_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢ns1_get_data_feed(source_id, feed_id)
One data feed of a source by id. GET /v1/data/feeds/{source_id}/{feed_id}.
입력 스키마
{
"type": "object",
"properties": {
"source_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]+$",
"description": "Data source id."
},
"feed_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]+$",
"description": "Data feed id."
}
},
"required": [
"source_id",
"feed_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢ns1_get_account_summary
The account's subscription, resources and utilization (queries, records, filter chains, monitors, ... against the plan limits). GET /v1/account/summary.
입력 스키마
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢ns1_get_usage_stats(zone, domain, type, period, aggregate, ...)
DNS query counts for the whole account, one zone, or one record (give zone, or zone + domain + type). period is 1h, 24h or 30d; aggregate, expand, limit and after apply to the account and zone levels only (a record takes just period). If next_page is not null, call again with its after/limit. GET /v1/stats/usage[/{zone}[/{domain}/{type}]].
입력 스키마
{
"type": "object",
"properties": {
"zone": {
"description": "Zone name, e.g. example.com.",
"type": "string",
"minLength": 1,
"maxLength": 254
},
"domain": {
"description": "Full record name inside the zone, e.g. www.example.com (or the zone name itself for the apex).",
"type": "string",
"minLength": 1,
"maxLength": 254
},
"type": {
"type": "string",
"pattern": "^[A-Z0-9]{1,12}$",
"description": "Record type, e.g. A, AAAA, CNAME, MX, TXT."
},
"period": {
"description": "Time window: 1h, 24h or 30d. Omit for the API default.",
"type": "string",
"enum": [
"1h",
"24h",
"30d"
]
},
"aggregate": {
"description": "Sum the counts over the period.",
"type": "boolean"
},
"expand": {
"description": "Break the counts down further. Account and zone level only.",
"type": "boolean"
},
"limit": {
"description": "Maximum items per page, 1-1000. Omit for NS1's default page size.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
},
"after": {
"description": "Continue after this item: pass next_page.after from the previous reply.",
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢ns1_get_qps_stats(zone, domain, type)
Current queries per second for the whole account, one zone, or one record (give zone, or zone + domain + type). GET /v1/stats/qps[/{zone}[/{domain}/{type}]].
입력 스키마
{
"type": "object",
"properties": {
"zone": {
"description": "Zone name, e.g. example.com.",
"type": "string",
"minLength": 1,
"maxLength": 254
},
"domain": {
"description": "Full record name inside the zone, e.g. www.example.com (or the zone name itself for the apex).",
"type": "string",
"minLength": 1,
"maxLength": 254
},
"type": {
"type": "string",
"pattern": "^[A-Z0-9]{1,12}$",
"description": "Record type, e.g. A, AAAA, CNAME, MX, TXT."
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢ns1_get_billing_records
How many DNS records the account uses against its plan limit in the current billing cycle. GET /billing-usage/v1/records.
입력 스키마
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢ns1_get_billing_queries(from, to)
Billable DNS query usage between two Unix timestamps. GET /billing-usage/v1/queries?from=&to=.
입력 스키마
{
"type": "object",
"properties": {
"from": {
"type": "integer",
"minimum": 0,
"maximum": 4102444800,
"description": "Start, Unix seconds."
},
"to": {
"type": "integer",
"minimum": 0,
"maximum": 4102444800,
"description": "End, Unix seconds."
}
},
"required": [
"from",
"to"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴ns1_create_record(zone, domain, type, answers, ttl)
WRITE: creates ONE new DNS record and CHANGES LIVE DNS for that name as soon as NS1 serves it; a wrong answer can take a site or mail offline. Plain records only (A, AAAA, ALIAS, CAA, CNAME, MX, PTR, SRV, TXT; no NS/SOA, no traffic-steering filters or metadata). Refuses when the record already exists (use ns1_update_record). Answers are lists of rdata fields: A ["192.0.2.10"], MX [10, "mail.example.com."], TXT ["v=spf1 -all"], SRV [10, 5, 5060, "sip.example.com."], CAA [0, "issue", "letsencrypt.org"]. PUT /v1/zones/{zone}/{domain}/{type}.
입력 스키마
{
"type": "object",
"properties": {
"zone": {
"description": "Zone name, e.g. example.com.",
"type": "string",
"minLength": 1,
"maxLength": 254
},
"domain": {
"description": "Full record name inside the zone, e.g. www.example.com (or the zone name itself for the apex).",
"type": "string",
"minLength": 1,
"maxLength": 254
},
"type": {
"type": "string",
"enum": [
"A",
"AAAA",
"ALIAS",
"CAA",
"CNAME",
"MX",
"PTR",
"SRV",
"TXT"
],
"description": "Record type."
},
"answers": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"minItems": 1,
"maxItems": 8,
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"maxLength": 4000
},
{
"type": "number"
}
]
}
},
"description": "One entry per answer, each a list of rdata fields (see the tool description)."
},
"ttl": {
"description": "TTL in seconds. Omit for the zone default.",
"type": "integer",
"minimum": 1,
"maximum": 2147483647
}
},
"required": [
"zone",
"domain",
"type",
"answers"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴ns1_update_record(zone, domain, type, answers, ttl)
WRITE: changes ONE existing DNS record and CHANGES LIVE DNS for that name immediately. Giving answers REPLACES all current answers of the record (send the complete new set); giving only ttl changes just the TTL. Plain records only (A, AAAA, ALIAS, CAA, CNAME, MX, PTR, SRV, TXT): when answers are given, a record that uses traffic-steering filters, links or per-answer metadata is refused (edit it in the NS1 portal). Fails if the record does not exist. POST /v1/zones/{zone}/{domain}/{type}.
입력 스키마
{
"type": "object",
"properties": {
"zone": {
"description": "Zone name, e.g. example.com.",
"type": "string",
"minLength": 1,
"maxLength": 254
},
"domain": {
"description": "Full record name inside the zone, e.g. www.example.com (or the zone name itself for the apex).",
"type": "string",
"minLength": 1,
"maxLength": 254
},
"type": {
"type": "string",
"enum": [
"A",
"AAAA",
"ALIAS",
"CAA",
"CNAME",
"MX",
"PTR",
"SRV",
"TXT"
],
"description": "Record type of the existing record."
},
"answers": {
"description": "The COMPLETE new answer set, each answer a list of rdata fields (as for ns1_create_record).",
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"minItems": 1,
"maxItems": 8,
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"maxLength": 4000
},
{
"type": "number"
}
]
}
}
},
"ttl": {
"description": "New TTL in seconds.",
"type": "integer",
"minimum": 1,
"maximum": 2147483647
}
},
"required": [
"zone",
"domain",
"type"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}커뮤니티
증거