{"id":"5c3ad2d2-c6d6-420c-b75e-d20fbf0899ce","shortId":"X8Kzz3","kind":"skill","title":"tencentcloud-dns","tagline":"Manage DNS records on DNSPod (Tencent Cloud's DNS service). Use when\nthe user asks to add / update / delete A / AAAA / CNAME / MX / TXT /\nNS / SRV / CAA records, list records for a domain, search records,\nadd ACME challenge / SPF / DKIM / domain-verification TXT records.\nBacked b","description":"# DNSPod (Tencent Cloud DNS)\n\nManage DNS records via the DNSPod API.\n\n> **Setup:** See [tencentcloud authentication](../_shared/tencentcloud.md). DNSPod uses the **same** Tencent Cloud SecretId / SecretKey as the rest of the platform — there's no separate `DP_Id` / `DP_Key` for the v3 API. The SDK client below auto-reads `TENCENTCLOUD_SECRET_ID` / `TENCENTCLOUD_SECRET_KEY` from env.\n>\n> The legacy v2 DNSPod API used a different key format; this skill targets the v3 SDK exclusively.\n\n## CLI (preferred)\n\nThe skill ships [`scripts/dns.py`](scripts/dns.py) — wraps every common DNSPod v3 operation.\n\n```bash\nDNS=$SKILL_DIR/scripts/dns.py\n\npython3 $DNS domains                                       # list domains\npython3 $DNS list example.com                              # records on one domain\npython3 $DNS list example.com --type CNAME                 # filter by type\npython3 $DNS search example.com --keyword api              # client-side keyword search\npython3 $DNS create example.com --sub www --type A --value 1.2.3.4\npython3 $DNS create example.com --sub @ --type MX --value 'mail.example.com.' --mx 10\npython3 $DNS create example.com --sub _acme-challenge --type TXT --value '\"<token>\"'\npython3 $DNS update example.com <record-id> --sub www --type A --value 5.6.7.8\npython3 $DNS delete example.com <record-id> --yes          # destructive, requires --yes\n```\n\nThe `delete` subcommand requires `--yes` — without it, it prints a dry-run line so you can confirm the right `record-id` first.\n\n## When to Use\n\n- Add a new subdomain (A / AAAA / CNAME)\n- Update an existing record (change IP, change CNAME target)\n- Add email-related records (MX, SPF / DKIM / DMARC TXT)\n- Add domain-verification TXT records (Google / Search Console / SSL ACME challenges)\n- List or search records on a domain\n- Delete obsolete records\n\n## Dependencies\n\n```bash\npip install tencentcloud-sdk-python\n```\n\n## Quick start\n\n```python\nimport os\nfrom tencentcloud.common import credential\nfrom tencentcloud.dnspod.v20210323 import dnspod_client, models\n\ncred = credential.EnvironmentVariableCredential().get_credential()\n# DNSPod is global — region is ignored, but the SDK still requires one.\nclient = dnspod_client.DnspodClient(cred, \"\")\n```\n\n## Workflows\n\n### List domains in the account\n\n```python\nreq = models.DescribeDomainListRequest()\nreq.Limit = 100\nresp = client.DescribeDomainList(req)\nfor d in resp.DomainList:\n    print(d.DomainId, d.Name, d.Status, d.RecordCount)\n```\n\n### List records for a domain\n\n```python\nreq = models.DescribeRecordListRequest()\nreq.Domain = \"example.com\"\nreq.Limit = 100                  # max 3000\n# Optional: req.RecordType = \"A\"\n# Optional: req.Subdomain = \"api\"\nresp = client.DescribeRecordList(req)\nfor r in resp.RecordList:\n    print(r.RecordId, r.Name, r.Type, r.Value, \"TTL=\", r.TTL, \"Line=\", r.Line)\n```\n\n### Search by keyword (filter client-side)\n\n```python\nreq = models.DescribeRecordListRequest()\nreq.Domain = \"example.com\"\nreq.Limit = 3000\nresp = client.DescribeRecordList(req)\nmatches = [r for r in resp.RecordList if \"api\" in r.Name or \"api\" in r.Value]\nfor r in matches:\n    print(r.RecordId, r.Name, r.Type, r.Value)\n```\n\n### Create records\n\n```python\ndef create_record(domain, sub_domain, record_type, value, ttl=600, mx=None):\n    req = models.CreateRecordRequest()\n    req.Domain = domain\n    req.SubDomain = sub_domain   # use \"@\" for the apex\n    req.RecordType = record_type\n    req.RecordLine = \"默认\"      # \"Default\" line — works in all environments\n    req.Value = value\n    req.TTL = ttl\n    if mx is not None:\n        req.MX = mx\n    resp = client.CreateRecord(req)\n    return resp.RecordId\n\n# A record\nrid = create_record(\"example.com\", \"www\", \"A\", \"1.2.3.4\")\n# CNAME (note: Value MUST end with a dot for absolute target)\nrid = create_record(\"example.com\", \"api2\", \"CNAME\", \"api.example.com.\")\n# MX (priority via mx=)\nrid = create_record(\"example.com\", \"@\", \"MX\", \"mail.example.com.\", mx=10)\n# TXT (SPF)\nrid = create_record(\"example.com\", \"@\", \"TXT\", '\"v=spf1 include:_spf.google.com ~all\"')\n# ACME challenge for cert issuance\nrid = create_record(\"example.com\", \"_acme-challenge\", \"TXT\", '\"<validation-token>\"')\n```\n\n### Update an existing record\n\n```python\nreq = models.ModifyRecordRequest()\nreq.Domain = \"example.com\"\nreq.RecordId = 123456789\nreq.SubDomain = \"www\"\nreq.RecordType = \"A\"\nreq.RecordLine = \"默认\"\nreq.Value = \"5.6.7.8\"\nreq.TTL = 600\nclient.ModifyRecord(req)\n```\n\n### Delete a record\n\n```python\n# Confirm with the user before running.\nreq = models.DeleteRecordRequest()\nreq.Domain = \"example.com\"\nreq.RecordId = 123456789\nclient.DeleteRecord(req)\n```\n\n## Record types\n\n| Type | Use For | Example Value |\n|---|---|---|\n| `A` | IPv4 address | `1.2.3.4` |\n| `AAAA` | IPv6 address | `2001:db8::1` |\n| `CNAME` | Alias to another hostname | `target.example.com.` |\n| `MX` | Mail server | `mail.example.com.` (set `MX=` priority) |\n| `TXT` | SPF / DKIM / DMARC / domain verification / ACME | `\"v=spf1 ...\"` (quoted) |\n| `NS` | Delegate subzone | `ns1.example.com.` |\n| `SRV` | Service discovery | `0 5 443 api.example.com.` |\n| `CAA` | Cert Authority Authorization | `0 issue \"letsencrypt.org\"` |\n\n## CNAME apex restriction\n\nDNSPod (like every other DNS service) **does not support `CNAME` on the apex `@`** (the bare domain) when other record types exist. Use `A` for the apex; `CNAME` for subdomains. If the upstream is itself a hostname (e.g. an EdgeOne / CDN endpoint), use the `Alias` record type via the EdgeOne console — DNSPod itself doesn't have an `ALIAS` type.\n\n## RecordLine (\"线路\")\n\nDNSPod can serve different values to different ISPs / regions via `RecordLine`. For 99% of cases pick `\"默认\"` (Default) — it serves to every resolver. Other common lines: `\"电信\"`, `\"联通\"`, `\"移动\"`, `\"境外\"`, `\"国内\"`. Use the console to set up split-horizon DNS; the API just lets you write the records.\n\n## Verifying changes\n\n```bash\ndig @119.29.29.29 www.example.com +short    # 119.29.29.29 = DNSPod's recursor\ndig www.example.com +trace                  # follow the delegation chain\n```\n\nDNSPod propagation is usually under a minute on its own resolver and bounded by the TTL elsewhere. Use `TTL=60` while iterating; raise to `600` once stable.\n\n## Important reminders\n\n- **CNAME values need a trailing dot** to be absolute (`api.example.com.`). Without it, DNSPod won't reject — but resolvers will hate you.\n- **Confirm deletes** with the user — there's no undo. The `RecordId` is required, so search first to be sure.\n- **Don't rotate `NS` records lightly** — losing nameserver delegation takes the entire domain offline until you fix it.\n- **TXT values for SPF/DMARC need to stay under 255 chars per chunk.** For longer policies, split into multiple quoted strings within one TXT value.\n- DNSPod has separate quota for free / paid plans on `RecordCount` and `RecordsPerMinute`. Check the console if `LimitExceeded` errors appear.\n\n## Console links\n\n- DNSPod console: <https://console.cloud.tencent.com/cns>\n- API reference: <https://www.tencentcloud.com/document/product/1097/40694>","tags":["tencentcloud","dns","skills","acedatacloud","acedata-cloud","agent-skills","agentskills","ai-image","ai-music","ai-tools","ai-video","claude-code"],"capabilities":["skill","source-acedatacloud","skill-tencentcloud-dns","topic-acedata-cloud","topic-agent-skills","topic-agentskills","topic-ai-image","topic-ai-music","topic-ai-tools","topic-ai-video","topic-claude-code","topic-cursor","topic-gemini-cli","topic-github-copilot","topic-mcp"],"categories":["Skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/AceDataCloud/Skills/tencentcloud-dns","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add AceDataCloud/Skills","source_repo":"https://github.com/AceDataCloud/Skills","install_from":"skills.sh"}},"qualityScore":"0.453","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 7 github stars · SKILL.md body (7,029 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:14:04.412Z","embedding":null,"createdAt":"2026-05-18T13:21:35.584Z","updatedAt":"2026-05-18T19:14:04.412Z","lastSeenAt":"2026-05-18T19:14:04.412Z","tsv":"'/_shared/tencentcloud.md':66 '/cns':925 '/document/product/1097/40694':930 '0':648,656 '1':617 '1.2.3.4':184,504,611 '10':195,534 '100':353,377 '119.29.29.29':775,778 '123456789':570,598 '2001':615 '255':884 '3000':379,415 '443':650 '5':649 '5.6.7.8':216,578 '60':808 '600':455,580,813 '99':734 'aaaa':24,257,612 'absolut':514,826 'account':348 'acm':40,202,288,547,557,637 'acme-challeng':201,556 'add':20,39,252,268,278 'address':610,614 'alia':619,705,718 'anoth':621 'apex':468,660,674,687 'api':61,92,112,169,385,426,430,764,926 'api.example.com':522,651,827 'api2':520 'appear':918 'ask':18 'authent':65 'author':654,655 'auto':98 'auto-read':97 'b':50 'back':49 'bare':676 'bash':138,301,773 'bound':801 'caa':30,652 'case':736 'cdn':701 'cert':550,653 'chain':788 'challeng':41,203,289,548,558 'chang':263,265,772 'char':885 'check':912 'chunk':887 'cli':125 'client':95,171,322,340,407 'client-sid':170,406 'client.createrecord':492 'client.deleterecord':599 'client.describedomainlist':355 'client.describerecordlist':387,417 'client.modifyrecord':581 'cloud':10,53,72 'cname':25,160,258,266,505,521,618,659,671,688,818 'common':134,746 'confirm':242,587,839 'consol':286,711,755,914,919,922 'console.cloud.tencent.com':924 'console.cloud.tencent.com/cns':923 'creat':177,187,198,442,446,499,517,528,538,553 'cred':324,342 'credenti':316,327 'credential.environmentvariablecredential':325 'd':358 'd.domainid':362 'd.name':363 'd.recordcount':365 'd.status':364 'db8':616 'def':445 'default':474,739 'deleg':642,787,866 'delet':22,219,226,297,583,840 'depend':300 'destruct':222 'differ':115,725,728 'dig':774,782 'dir/scripts/dns.py':141 'discoveri':647 'dkim':43,275,633 'dmarc':276,634 'dns':3,5,12,54,56,139,143,148,156,165,176,186,197,208,218,666,762 'dnspod':8,51,60,67,111,135,321,328,662,712,722,779,789,830,900,921 'dnspod_client.dnspodclient':341 'doesn':714 'domain':36,45,144,146,154,280,296,345,370,448,450,461,464,635,677,870 'domain-verif':44,279 'dot':512,823 'dp':85,87 'dri':236 'dry-run':235 'e.g':698 'edgeon':700,710 'elsewher':805 'email':270 'email-rel':269 'end':509 'endpoint':702 'entir':869 'env':107 'environ':479 'error':917 'everi':133,664,743 'exampl':606 'example.com':150,158,167,178,188,199,210,220,375,413,501,519,530,540,555,568,596 'exclus':124 'exist':261,562,682 'filter':161,405 'first':248,854 'fix':874 'follow':785 'format':117 'free':905 'get':326 'global':330 'googl':284 'hate':837 'horizon':761 'hostnam':622,697 'id':86,102,247 'ignor':333 'import':311,315,320,816 'includ':544 'instal':303 'ip':264 'ipv4':609 'ipv6':613 'isp':729 'issu':657 'issuanc':551 'iter':810 'key':88,105,116 'keyword':168,173,404 'legaci':109 'let':766 'letsencrypt.org':658 'light':863 'like':663 'limitexceed':916 'line':238,400,475,747 'link':920 'list':32,145,149,157,290,344,366 'longer':889 'lose':864 'mail':625 'mail.example.com':193,532,627 'manag':4,55 'match':419,436 'max':378 'minut':795 'model':323 'models.createrecordrequest':459 'models.deleterecordrequest':594 'models.describedomainlistrequest':351 'models.describerecordlistrequest':373,411 'models.modifyrecordrequest':566 'multipl':893 'must':508 'mx':26,191,194,273,456,485,490,523,526,531,533,624,629 'nameserv':865 'need':820,880 'new':254 'none':457,488 'note':506 'ns':28,641,861 'ns1.example.com':644 'obsolet':298 'offlin':871 'one':153,339,897 'oper':137 'option':380,383 'os':312 'paid':906 'per':886 'pick':737 'pip':302 'plan':907 'platform':80 'polici':890 'prefer':126 'print':233,361,393,437 'prioriti':524,630 'propag':790 'python':307,310,349,371,409,444,564,586 'python3':142,147,155,164,175,185,196,207,217 'quick':308 'quot':640,894 'quota':903 'r':390,420,422,434 'r.line':401 'r.name':395,428,439 'r.recordid':394,438 'r.ttl':399 'r.type':396,440 'r.value':397,432,441 'rais':811 'read':99 'record':6,31,33,38,48,57,151,246,262,272,283,293,299,367,443,447,451,470,497,500,518,529,539,554,563,585,601,680,706,770,862 'record-id':245 'recordcount':909 'recordid':849 'recordlin':720,732 'recordsperminut':911 'recursor':781 'refer':927 'region':331,730 'reject':833 'relat':271 'remind':817 'req':350,356,372,388,410,418,458,493,565,582,593,600 'req.domain':374,412,460,567,595 'req.limit':352,376,414 'req.mx':489 'req.recordid':569,597 'req.recordline':472,575 'req.recordtype':381,469,573 'req.subdomain':384,462,571 'req.ttl':482,579 'req.value':480,577 'requir':223,228,338,851 'resolv':744,799,835 'resp':354,386,416,491 'resp.domainlist':360 'resp.recordid':495 'resp.recordlist':392,424 'rest':77 'restrict':661 'return':494 'rid':498,516,527,537,552 'right':244 'rotat':860 'run':237,592 'scripts/dns.py':130,131 'sdk':94,123,306,336 'search':37,166,174,285,292,402,853 'secret':101,104 'secretid':73 'secretkey':74 'see':63 'separ':84,902 'serv':724,741 'server':626 'servic':13,646,667 'set':628,757 'setup':62 'ship':129 'short':777 'side':172,408 'skill':119,128,140 'skill-tencentcloud-dns' 'source-acedatacloud' 'spf':42,274,536,632 'spf.google.com':545 'spf/dmarc':879 'spf1':543,639 'split':760,891 'split-horizon':759 'srv':29,645 'ssl':287 'stabl':815 'start':309 'stay':882 'still':337 'string':895 'sub':179,189,200,211,449,463 'subcommand':227 'subdomain':255,690 'subzon':643 'support':670 'sure':857 'take':867 'target':120,267,515 'target.example.com':623 'tencent':9,52,71 'tencentcloud':2,64,100,103,305 'tencentcloud-dn':1 'tencentcloud-sdk-python':304 'tencentcloud.common':314 'tencentcloud.dnspod':318 'topic-acedata-cloud' 'topic-agent-skills' 'topic-agentskills' 'topic-ai-image' 'topic-ai-music' 'topic-ai-tools' 'topic-ai-video' 'topic-claude-code' 'topic-cursor' 'topic-gemini-cli' 'topic-github-copilot' 'topic-mcp' 'trace':784 'trail':822 'ttl':398,454,483,804,807 'txt':27,47,205,277,282,535,541,559,631,876,898 'type':159,163,181,190,204,213,452,471,602,603,681,707,719 'undo':847 'updat':21,209,259,560 'upstream':693 'use':14,68,113,251,465,604,683,703,753,806 'user':17,590,843 'usual':792 'v':542,638 'v2':110 'v20210323':319 'v3':91,122,136 'valu':183,192,206,215,453,481,507,607,726,819,877,899 'verif':46,281,636 'verifi':771 'via':58,525,708,731 'within':896 'without':230,828 'won':831 'work':476 'workflow':343 'wrap':132 'write':768 'www':180,212,502,572 'www.example.com':776,783 'www.tencentcloud.com':929 'www.tencentcloud.com/document/product/1097/40694':928 'yes':221,224,229 '国内':752 '境外':751 '电信':748 '移动':750 '线路':721 '联通':749 '默认':473,576,738","prices":[{"id":"3dcb6597-2be3-4eac-a968-c774358d7d0a","listingId":"5c3ad2d2-c6d6-420c-b75e-d20fbf0899ce","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"AceDataCloud","category":"Skills","install_from":"skills.sh"},"createdAt":"2026-05-18T13:21:35.584Z"}],"sources":[{"listingId":"5c3ad2d2-c6d6-420c-b75e-d20fbf0899ce","source":"github","sourceId":"AceDataCloud/Skills/tencentcloud-dns","sourceUrl":"https://github.com/AceDataCloud/Skills/tree/main/skills/tencentcloud-dns","isPrimary":false,"firstSeenAt":"2026-05-18T13:21:35.584Z","lastSeenAt":"2026-05-18T19:14:04.412Z"}],"details":{"listingId":"5c3ad2d2-c6d6-420c-b75e-d20fbf0899ce","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"AceDataCloud","slug":"tencentcloud-dns","github":{"repo":"AceDataCloud/Skills","stars":7,"topics":["acedata-cloud","agent-skills","agentskills","ai-image","ai-music","ai-tools","ai-video","claude-code","cursor","gemini-cli","github-copilot","mcp","npm","openai-codex","roo-code"],"license":"other","html_url":"https://github.com/AceDataCloud/Skills","pushed_at":"2026-05-18T07:35:03Z","description":"Agent Skills for AceDataCloud AI services — music, image, video generation, web search, and more. Compatible with Claude Code, GitHub Copilot, Gemini CLI, and all agentskills.io-compatible agents.","skill_md_sha":"50f6c89ec9b3719916be7fafa518eabcb8e0c0f6","skill_md_path":"skills/tencentcloud-dns/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/AceDataCloud/Skills/tree/main/skills/tencentcloud-dns"},"layout":"multi","source":"github","category":"Skills","frontmatter":{"name":"tencentcloud-dns","license":"Apache-2.0","description":"Manage DNS records on DNSPod (Tencent Cloud's DNS service). Use when\nthe user asks to add / update / delete A / AAAA / CNAME / MX / TXT /\nNS / SRV / CAA records, list records for a domain, search records,\nadd ACME challenge / SPF / DKIM / domain-verification TXT records.\nBacked by the official tencentcloud-sdk-python DNSPod client."},"skills_sh_url":"https://skills.sh/AceDataCloud/Skills/tencentcloud-dns"},"updatedAt":"2026-05-18T19:14:04.412Z"}}