{"id":"db9b2394-b20f-47db-8ca9-ad44c8f3a340","shortId":"zx2SDW","kind":"skill","title":"create-provider","tagline":"Create new AtlasClaw providers with proper structure, documentation, and skills. Use when building integrations with external systems like APIs, ITSM, CRM, or custom services.","description":"# Create AtlasClaw Provider\n\nGuide for creating new providers that integrate external systems with the AtlasClaw AI Agent.\n\n## Quick Start Checklist\n\n```\nProvider Creation Progress:\n- [ ] 1. Gather requirements (system type, auth method, capabilities)\n- [ ] 2. Create provider directory structure\n- [ ] 3. Write PROVIDER.md with LLM context fields\n- [ ] 4. Create skills for each capability\n- [ ] 5. Add configuration to atlasclaw.json\n- [ ] 6. Test provider loading and skill execution\n```\n\n## Phase 1: Gather Requirements\n\nBefore creating a provider, determine:\n\n| Question | Example Answer |\n|----------|----------------|\n| **Provider type** | `servicenow`, `github`, `datadog` |\n| **Display name** | ServiceNow, GitHub, Datadog |\n| **Authentication method** | Basic Auth, API Token, OAuth 2.0, Cookie |\n| **Base URL pattern** | `https://instance.service-now.com` |\n| **Key capabilities** | CRUD incidents, manage users, query metrics |\n| **Target keywords** | incident, ticket, alert, deployment |\n\n## Phase 2: Directory Structure\n\nCreate provider at: `{workspace}/providers/{provider-name}/`\n\n```\nproviders/{provider-name}/\n├── PROVIDER.md           # Required - provider metadata and documentation\n├── README.md             # Optional - human documentation\n├── skills/               # Required - at least one skill\n│   └── {skill-name}/\n│       ├── SKILL.md      # Required - skill metadata\n│       └── scripts/      # Required for executable skills\n│           └── handler.py\n└── references/           # Optional - API docs, mappings\n    └── api_mapping.md\n```\n\n## Phase 3: PROVIDER.md Template\n\n```yaml\n---\n# === Required Fields ===\nprovider_type: {provider-name}        # Must match directory name\ndisplay_name: {Display Name}\nversion: \"1.0.0\"\n\n# === LLM Context Fields (for Skill Discovery) ===\nkeywords:\n  - keyword1                          # Domain-specific terms users might say\n  - keyword2\n  - keyword3\n\ncapabilities:\n  - Capability description 1\n  - Capability description 2\n\nuse_when:\n  - User intent scenario 1\n  - User intent scenario 2\n\navoid_when:\n  - Scenario when other provider is better (suggest alternative)\n---\n\n# {Display Name} Provider\n\nBrief description of what this provider integrates with.\n\n## Connection Parameters\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `base_url` | string | Yes | API base URL |\n| `username` | string | Conditional | Username for auth |\n| `password` | string | Conditional | Password or token |\n| `api_key` | string | Conditional | API key if applicable |\n\n## Authentication Modes\n\n| Mode | Parameters | Notes |\n|------|------------|-------|\n| Basic Auth | `username` + `password` | Standard HTTP Basic |\n| API Token | `api_key` | Bearer token auth |\n\n## Configuration Example\n\n```json\n{\n  \"service_providers\": {\n    \"{provider-name}\": {\n      \"default\": {\n        \"base_url\": \"${PROVIDER_URL}\",\n        \"api_key\": \"${PROVIDER_API_KEY}\"\n      }\n    }\n  }\n}\n```\n\n## Environment Variables\n\n```bash\nPROVIDER_URL=https://api.example.com\nPROVIDER_API_KEY=your-api-key\n```\n\n## Provided Skills\n\n| Skill | Description |\n|-------|-------------|\n| `{provider}-{action}` | Brief description |\n```\n\n## Phase 4: SKILL.md Template\n\n```yaml\n---\nname: \"{provider}-{action}\"\ndescription: \"Brief description. Trigger when user wants to {action}.\"\ncategory: \"provider:{provider-name}\"\nprovider_type: \"{provider-name}\"\ninstance_required: \"true\"\n\n# === LLM Context Fields ===\ntriggers:\n  - action phrase 1\n  - action phrase 2\n\nuse_when:\n  - User intent scenario 1\n  - User intent scenario 2\n\navoid_when:\n  - Scenario when other skill is better\n\nexamples:\n  - \"Example user input 1\"\n  - \"Example user input 2\"\n\nrelated:\n  - related-skill-1\n  - related-skill-2\n\n# === Tool Registration ===\ntool_name: \"{provider}_{action}\"\ntool_entrypoint: \"scripts/handler.py:handler\"\n---\n\n# {provider}-{action}\n\n## Purpose\n\nWhat this skill does and when to use it.\n\n## Parameters\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| param1 | string | Yes | Description |\n| param2 | integer | No | Description (default: 10) |\n\n## Usage Examples\n\n**Example 1**: Basic usage\n```bash\npython scripts/handler.py --param1 \"value\"\n```\n\n## Error Handling\n\n| Error | Cause | Resolution |\n|-------|-------|------------|\n| AUTH_FAILED | Invalid credentials | Check API key |\n```\n\n## Phase 5: Handler Template\n\nCreate `scripts/handler.py`:\n\n```python\n# -*- coding: utf-8 -*-\n\"\"\"\n{Skill Name} Handler\n\nImplements the {action} functionality for {Provider} provider.\n\"\"\"\nfrom __future__ import annotations\n\nimport argparse\nimport json\nimport os\nimport sys\nfrom typing import Any, Optional\n\nimport requests\n\n\ndef get_provider_config() -> dict[str, Any]:\n    \"\"\"Load provider configuration from atlasclaw.json.\"\"\"\n    config_path = os.environ.get(\"ATLASCLAW_CONFIG\", \"atlasclaw.json\")\n    with open(config_path, \"r\", encoding=\"utf-8\") as f:\n        config = json.load(f)\n    \n    provider_config = config.get(\"service_providers\", {}).get(\"{provider-name}\", {})\n    instance = os.environ.get(\"PROVIDER_INSTANCE\", \"default\")\n    return provider_config.get(instance, {})\n\n\ndef handler(params: dict[str, Any]) -> dict[str, Any]:\n    \"\"\"\n    Main handler function.\n    \n    Args:\n        params: Input parameters\n        \n    Returns:\n        Result dictionary with success, message, and data\n    \"\"\"\n    config = get_provider_config()\n    base_url = config.get(\"base_url\", \"\").rstrip(\"/\")\n    api_key = config.get(\"api_key\", \"\")\n    \n    headers = {\n        \"Authorization\": f\"Bearer {api_key}\",\n        \"Content-Type\": \"application/json\"\n    }\n    \n    try:\n        # Implement API call here\n        response = requests.get(\n            f\"{base_url}/api/endpoint\",\n            headers=headers,\n            timeout=30\n        )\n        response.raise_for_status()\n        \n        return {\n            \"success\": True,\n            \"message\": \"Operation completed successfully\",\n            \"data\": response.json()\n        }\n    except requests.RequestException as e:\n        return {\n            \"success\": False,\n            \"message\": f\"API request failed: {str(e)}\",\n            \"error\": {\"code\": \"API_ERROR\", \"details\": str(e)}\n        }\n\n\ndef main():\n    \"\"\"CLI entry point.\"\"\"\n    parser = argparse.ArgumentParser(description=\"{Skill description}\")\n    parser.add_argument(\"--param1\", required=True, help=\"Parameter 1\")\n    parser.add_argument(\"--param2\", type=int, default=10, help=\"Parameter 2\")\n    \n    args = parser.parse_args()\n    \n    result = handler({\n        \"param1\": args.param1,\n        \"param2\": args.param2\n    })\n    \n    print(json.dumps(result, indent=2))\n    sys.exit(0 if result[\"success\"] else 1)\n\n\nif __name__ == \"__main__\":\n    main()\n```\n\n## Phase 6: Configuration\n\nAdd to `atlasclaw.json`:\n\n```json\n{\n  \"service_providers\": {\n    \"{provider-name}\": {\n      \"default\": {\n        \"base_url\": \"${PROVIDER_URL}\",\n        \"api_key\": \"${PROVIDER_API_KEY}\"\n      },\n      \"production\": {\n        \"base_url\": \"${PROVIDER_PROD_URL}\",\n        \"api_key\": \"${PROVIDER_PROD_API_KEY}\"\n      }\n    }\n  }\n}\n```\n\nAdd to `.env`:\n\n```bash\nPROVIDER_URL=https://api.example.com\nPROVIDER_API_KEY=your-api-key\n```\n\n## Phase 7: Verification\n\n1. **Restart service** (or wait for hot reload)\n2. **Check logs** for provider loading:\n   ```\n   [AtlasClaw] Provider loaded: {provider-name}\n   [AtlasClaw] Skills loaded: X from {provider-name}\n   ```\n3. **Test via API**:\n   ```bash\n   curl http://localhost:8000/api/skills | grep {provider-name}\n   ```\n\n## LLM Context Best Practices\n\n### Keywords\n- Use domain-specific terms users naturally say\n- Avoid generic terms like \"create\", \"update\", \"manage\"\n- Include abbreviations and synonyms\n\n### use_when\n- Describe user intent, not technical actions\n- Focus on business scenarios\n- Include common phrasings\n\n### avoid_when\n- Critical for disambiguation between similar providers\n- Always suggest the correct alternative\n- Include commonly confused scenarios\n\n## Common Provider Types\n\n| Type | Examples | Typical Keywords |\n|------|----------|------------------|\n| ITSM | ServiceNow, Jira | incident, ticket, issue, sprint |\n| Monitoring | Datadog, Prometheus | alert, metric, dashboard |\n| Communication | Slack, Teams | message, channel, notification |\n| Version Control | GitHub, GitLab | repository, PR, merge, commit |\n| CRM | Salesforce | lead, opportunity, account |\n| Cloud | AWS, Azure | instance, resource, deployment |\n\n## Additional Resources\n\n- [PROVIDER_GUIDE.md](file:///c:/Projects/cmps/atlasclaw/docs/PROVIDER_GUIDE.md) - Full documentation\n- [SKILL_GUIDE.md](file:///c:/Projects/cmps/atlasclaw/docs/SKILL_GUIDE.md) - Skill development guide\n- [Jira Provider](file:///c:/Projects/cmps/atlasclaw/.atlasclaw/providers/jira) - Reference implementation","tags":["create","atlasclaw","provider","providers","cloudchef","agent-skills","agentic-workflow","ai-integration","openclaw"],"capabilities":["skill","source-cloudchef","skill-create-atlasclaw-provider","topic-agent-skills","topic-agentic-workflow","topic-ai-integration","topic-openclaw"],"categories":["atlasclaw-providers"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/CloudChef/atlasclaw-providers/create-atlasclaw-provider","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add CloudChef/atlasclaw-providers","source_repo":"https://github.com/CloudChef/atlasclaw-providers","install_from":"skills.sh"}},"qualityScore":"0.455","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 10 github stars · SKILL.md body (8,798 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:08:22.817Z","embedding":null,"createdAt":"2026-05-09T01:05:32.819Z","updatedAt":"2026-05-18T19:08:22.817Z","lastSeenAt":"2026-05-18T19:08:22.817Z","tsv":"'-8':502,557 '/api/endpoint':639 '/c':925,930,937 '/projects/cmps/atlasclaw/.atlasclaw/providers/jira':938 '/projects/cmps/atlasclaw/docs/provider_guide.md':926 '/projects/cmps/atlasclaw/docs/skill_guide.md':931 '/providers':146 '0':720 '1':51,90,231,240,393,402,419,428,473,694,725,781 '1.0.0':210 '10':469,701 '2':59,139,234,244,396,406,423,432,704,718,789 '2.0':118 '3':64,190,809 '30':643 '4':71,358 '5':77,494 '6':82,731 '7':779 '8000/api/skills':816 'abbrevi':842 'account':915 'action':354,364,373,391,394,438,444,508,852 'add':78,733,764 'addit':922 'agent':44 'ai':43 'alert':136,894 'altern':254,872 'alway':868 'annot':516 'answer':100 'api':22,115,185,276,291,295,311,313,331,334,343,347,491,614,617,623,631,665,672,747,750,758,762,772,776,812 'api.example.com':341,770 'api_mapping.md':188 'applic':298 'application/json':628 'arg':592,705,707 'argpars':518 'argparse.argumentparser':683 'args.param1':711 'args.param2':713 'argument':688,696 'atlasclaw':6,29,42,547,795,801 'atlasclaw.json':81,543,549,735 'auth':56,114,284,305,317,486 'authent':111,299 'author':620 'avoid':245,407,834,860 'aw':917 'azur':918 'base':120,272,277,327,608,611,637,743,753 'bash':338,476,767,813 'basic':113,304,310,474 'bearer':315,622 'best':823 'better':252,414 'brief':258,355,366 'build':16 'busi':855 'call':632 'capabl':58,76,125,228,229,232 'categori':374 'caus':484 'channel':901 'check':490,790 'checklist':47 'cli':679 'cloud':916 'code':500,671 'commit':910 'common':858,874,877 'communic':897 'complet':652 'condit':281,287,294 'config':535,544,548,552,560,564,604,607 'config.get':565,610,616 'configur':79,318,541,732 'confus':875 'connect':266 'content':626 'content-typ':625 'context':69,212,388,822 'control':904 'cooki':119 'correct':871 'creat':2,4,28,33,60,72,94,142,497,838 'create-provid':1 'creation':49 'credenti':489 'critic':862 'crm':24,911 'crud':126 'curl':814 'custom':26 'dashboard':896 'data':603,654 'datadog':105,110,892 'def':532,580,677 'default':326,468,576,700,742 'deploy':137,921 'describ':847 'descript':230,233,259,271,352,356,365,367,459,463,467,684,686 'detail':674 'determin':97 'develop':933 'dict':536,583,586 'dictionari':598 'directori':62,140,203 'disambigu':864 'discoveri':216 'display':106,205,207,255 'doc':186 'document':11,159,163,928 'domain':220,828 'domain-specif':219,827 'e':659,669,676 'els':724 'encod':555 'entri':680 'entrypoint':440 'env':766 'environ':336 'error':481,483,670,673 'exampl':99,319,415,416,420,471,472,881 'except':656 'execut':88,180 'extern':19,38 'f':559,562,621,636,664 'fail':487,667 'fals':662 'field':70,195,213,389 'focus':853 'full':927 'function':509,591 'futur':514 'gather':52,91 'generic':835 'get':533,568,605 'github':104,109,905 'gitlab':906 'grep':817 'guid':31,934 'handl':482 'handler':442,495,505,581,590,709 'handler.py':182 'header':619,640,641 'help':692,702 'hot':787 'http':309 'human':162 'implement':506,630,940 'import':515,517,519,521,523,527,530 'incid':127,134,887 'includ':841,857,873 'indent':717 'input':418,422,594 'instanc':384,572,575,579,919 'instance.service-now.com':123 'int':699 'integ':465 'integr':17,37,264 'intent':238,242,400,404,849 'invalid':488 'issu':889 'itsm':23,884 'jira':886,935 'json':320,520,736 'json.dumps':715 'json.load':561 'key':124,292,296,314,332,335,344,348,492,615,618,624,748,751,759,763,773,777 'keyword':133,217,825,883 'keyword1':218 'keyword2':226 'keyword3':227 'lead':913 'least':167 'like':21,837 'llm':68,211,387,821 'load':85,539,794,797,803 'localhost':815 'log':791 'main':589,678,728,729 'manag':128,840 'map':187 'match':202 'merg':909 'messag':601,650,663,900 'metadata':157,176 'method':57,112 'metric':131,895 'might':224 'mode':300,301 'monitor':891 'must':201 'name':107,149,153,172,200,204,206,208,256,325,362,378,383,436,456,504,571,727,741,800,808,820 'natur':832 'new':5,34 'note':303 'notif':902 'oauth':117 'one':168 'open':551 'oper':651 'opportun':914 'option':161,184,529 'os':522 'os.environ.get':546,573 'param':582,593 'param1':460,479,689,710 'param2':464,697,712 'paramet':267,268,302,455,595,693,703 'parser':682 'parser.add':687,695 'parser.parse':706 'password':285,288,307 'path':545,553 'pattern':122 'phase':89,138,189,357,493,730,778 'phrase':392,395,859 'point':681 'pr':908 'practic':824 'print':714 'prod':756,761 'product':752 'progress':50 'prometheus':893 'proper':9 'provid':3,7,30,35,48,61,84,96,101,143,148,150,152,156,196,199,250,257,263,322,324,329,333,339,342,349,353,363,375,377,379,382,437,443,511,512,534,540,563,567,570,574,606,738,740,745,749,755,760,768,771,793,796,799,807,819,867,878,936 'provider-nam':147,151,198,323,376,381,569,739,798,806,818 'provider.md':66,154,191 'provider_config.get':578 'provider_guide.md':924 'purpos':445 'python':477,499 'queri':130 'question':98 'quick':45 'r':554 'readme.md':160 'refer':183,939 'registr':434 'relat':424,426,430 'related-skil':425,429 'reload':788 'repositori':907 'request':531,666 'requests.get':635 'requests.requestexception':657 'requir':53,92,155,165,174,178,194,270,385,458,690 'resolut':485 'resourc':920,923 'respons':634 'response.json':655 'response.raise':644 'restart':782 'result':597,708,716,722 'return':577,596,647,660 'rstrip':613 'salesforc':912 'say':225,833 'scenario':239,243,247,401,405,409,856,876 'script':177 'scripts/handler.py':441,478,498 'servic':27,321,566,737,783 'servicenow':103,108,885 'similar':866 'skill':13,73,87,164,169,171,175,181,215,350,351,412,427,431,448,503,685,802,932 'skill-create-atlasclaw-provider' 'skill-nam':170 'skill.md':173,359 'skill_guide.md':929 'slack':898 'source-cloudchef' 'specif':221,829 'sprint':890 'standard':308 'start':46 'status':646 'str':537,584,587,668,675 'string':274,280,286,293,461 'structur':10,63,141 'success':600,648,653,661,723 'suggest':253,869 'synonym':844 'sys':524 'sys.exit':719 'system':20,39,54 'target':132 'team':899 'technic':851 'templat':192,360,496 'term':222,830,836 'test':83,810 'ticket':135,888 'timeout':642 'token':116,290,312,316 'tool':433,435,439 'topic-agent-skills' 'topic-agentic-workflow' 'topic-ai-integration' 'topic-openclaw' 'tri':629 'trigger':368,390 'true':386,649,691 'type':55,102,197,269,380,457,526,627,698,879,880 'typic':882 'updat':839 'url':121,273,278,328,330,340,609,612,638,744,746,754,757,769 'usag':470,475 'use':14,235,397,453,826,845 'user':129,223,237,241,370,399,403,417,421,831,848 'usernam':279,282,306 'utf':501,556 'valu':480 'variabl':337 'verif':780 'version':209,903 'via':811 'wait':785 'want':371 'workspac':145 'write':65 'x':804 'yaml':193,361 'yes':275,462 'your-api-key':345,774","prices":[{"id":"354f5801-74c2-4557-84ce-a013de11ad0b","listingId":"db9b2394-b20f-47db-8ca9-ad44c8f3a340","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"CloudChef","category":"atlasclaw-providers","install_from":"skills.sh"},"createdAt":"2026-05-09T01:05:32.819Z"}],"sources":[{"listingId":"db9b2394-b20f-47db-8ca9-ad44c8f3a340","source":"github","sourceId":"CloudChef/atlasclaw-providers/create-atlasclaw-provider","sourceUrl":"https://github.com/CloudChef/atlasclaw-providers/tree/main/skills/create-atlasclaw-provider","isPrimary":false,"firstSeenAt":"2026-05-09T01:05:32.819Z","lastSeenAt":"2026-05-18T19:08:22.817Z"}],"details":{"listingId":"db9b2394-b20f-47db-8ca9-ad44c8f3a340","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"CloudChef","slug":"create-atlasclaw-provider","github":{"repo":"CloudChef/atlasclaw-providers","stars":10,"topics":["agent-skills","agentic-workflow","ai-integration","openclaw"],"license":"apache-2.0","html_url":"https://github.com/CloudChef/atlasclaw-providers","pushed_at":"2026-05-18T03:15:37Z","description":"atlasclaw-providers are the integration with enterprise systems through skills and webhook.","skill_md_sha":"9a96ef10b72b1c30e763f0f552acaf54d8a8be81","skill_md_path":"skills/create-atlasclaw-provider/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/CloudChef/atlasclaw-providers/tree/main/skills/create-atlasclaw-provider"},"layout":"multi","source":"github","category":"atlasclaw-providers","frontmatter":{"name":"create-provider","description":"Create new AtlasClaw providers with proper structure, documentation, and skills. Use when building integrations with external systems like APIs, ITSM, CRM, or custom services."},"skills_sh_url":"https://skills.sh/CloudChef/atlasclaw-providers/create-atlasclaw-provider"},"updatedAt":"2026-05-18T19:08:22.817Z"}}