[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6K0FBZYXG5M8VBW5R6TPKEP":3,"skill-same:01M6K0FBZYXG5M8VBW5R6TPKEP":77},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":42,"linkOnly":43,"markdownContent":44,"markdownBody":45,"frontMatter":46,"refName":47,"commitSha":48,"skillDirectory":49,"forksCount":13,"repositoryHtmlUrl":50,"repositoryHomepageUrl":6,"ownerHtmlUrl":51,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":52,"install":53,"resources":66},"01M6K0FBZYXG5M8VBW5R6TPKEP","tinyfish",null,"AI-powered web automation using TinyFish Web Agent. Use when you need to scrape data from websites, automate form filling, extract structured information, or perform any web-based task using natural language instructions. Works with any website including those with JavaScript, dynamic content, and bot protection.","sigitpoerwo\u002Frepoworkspace_zahra","sigitpoerwo","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F260207224?v=4","01M6K000PB6NA0N6SQ7VFMEAFZ","01M6K000V4N0CEHNPPQA9TNQNX",0,"MIT","https:\u002F\u002Fgithub.com\u002Fsigitpoerwo\u002Frepoworkspace_zahra\u002Fblob\u002Fmain\u002Fskills\u002F05-CUSTOM-SKILLS\u002Ftinyfish\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[5,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],"protection","you","with","information","form","web automation","natural language","task","language","bot","use","instructions","automate","scrape","data","website","web","javascript","automation","2026-11-10 10:12:30",false,"---\nname: tinyfish\ndescription: AI-powered web automation using TinyFish Web Agent. Use when you need to scrape data from websites, automate form filling, extract structured information, or perform any web-based task using natural language instructions. Works with any website including those with JavaScript, dynamic content, and bot protection.\nlicense: MIT\n---\n\n# TinyFish Web Agent Skill\n\nAI-powered web automation that turns natural language into browser actions.\n\n## When to Use This Skill\n\nUse TinyFish when you need to:\n- **Scrape data** from websites (prices, contacts, articles, etc.)\n- **Automate forms** (filling, submission, multi-step workflows)\n- **Extract structured data** (JSON, tables, lists)\n- **Monitor websites** (price tracking, content changes)\n- **Collect research data** (papers, citations, statistics)\n- **Generate leads** (contact information, company data)\n- **Test web applications** (automated UI testing)\n- **Aggregate content** (news, social media, forums)\n\n## Quick Start\n\n### 1. Start TinyFish MCP Server\n\n```bash\ncd E:\\ZAHRA-WORKSPACE\\mcp-servers\\tinyfish\nnpm start\n```\n\nServer runs on `http:\u002F\u002Flocalhost:8080`\n\n### 2. Use the Tools\n\nTwo tools available:\n- `web_scrape` - Extract data from websites\n- `web_automation` - Automate tasks on websites\n\n## Tool 1: web_scrape\n\nExtract data from any website using natural language.\n\n### Parameters\n\n- `url` (string, required) - Target website URL\n- `goal` (string, required) - Natural language instruction of what to extract\n\n### Examples\n\n**Example 1: Product Price Monitoring**\n```json\n{\n  \"url\": \"https:\u002F\u002Fexample.com\u002Fproducts\",\n  \"goal\": \"Extract all product names, prices, and availability status. Return as JSON array with fields: name, price, inStock.\"\n}\n```\n\n**Example 2: Lead Generation**\n```json\n{\n  \"url\": \"https:\u002F\u002Fcompany-directory.com\",\n  \"goal\": \"Extract company names, email addresses, phone numbers, and website URLs from the first page. Return as structured JSON.\"\n}\n```\n\n**Example 3: News Aggregation**\n```json\n{\n  \"url\": \"https:\u002F\u002Fnews-site.com\",\n  \"goal\": \"Extract the top 10 article titles, authors, publication dates, and article URLs. Return as JSON array.\"\n}\n```\n\n**Example 4: Research Data Collection**\n```json\n{\n  \"url\": \"https:\u002F\u002Fscholar.google.com\u002Fscholar?q=machine+learning\",\n  \"goal\": \"Extract the first 5 paper titles, authors, publication years, and citation counts.\"\n}\n```\n\n**Example 5: E-commerce Comparison**\n```json\n{\n  \"url\": \"https:\u002F\u002Fstore.com\u002Fsearch?q=laptop\",\n  \"goal\": \"Extract product names, prices, ratings, and review counts for the first 10 results. Return as JSON.\"\n}\n```\n\n### Best Practices for web_scrape\n\n1. **Be specific about data fields**\n   - ✅ \"Extract product name, price, and rating\"\n   - ❌ \"Extract product information\"\n\n2. **Specify output format**\n   - ✅ \"Return as JSON array with fields: name, price, inStock\"\n   - ❌ \"Return the data\"\n\n3. **Limit the scope**\n   - ✅ \"Extract the first 10 products\"\n   - ❌ \"Extract all products\" (might timeout)\n\n4. **Include field names**\n   - ✅ \"Extract: title, author, date, url\"\n   - ❌ \"Extract article information\"\n\n## Tool 2: web_automation\n\nAutomate tasks on websites (forms, clicks, workflows).\n\n### Parameters\n\n- `url` (string, required) - Target website URL\n- `goal` (string, required) - Natural language instruction of what to do\n\n### Examples\n\n**Example 1: Form Filling**\n```json\n{\n  \"url\": \"https:\u002F\u002Fexample.com\u002Fcontact\",\n  \"goal\": \"Fill the contact form with name 'John Doe', email 'john@example.com', subject 'Inquiry', message 'Test message', and click the submit button.\"\n}\n```\n\n**Example 2: Login and Extract**\n```json\n{\n  \"url\": \"https:\u002F\u002Fexample.com\u002Flogin\",\n  \"goal\": \"Login with username 'testuser' and password 'testpass', then navigate to the dashboard and extract the account balance.\"\n}\n```\n\n**Example 3: Multi-step Workflow**\n```json\n{\n  \"url\": \"https:\u002F\u002Fexample.com\u002Fsignup\",\n  \"goal\": \"Fill signup form with email 'test@example.com', password 'SecurePass123', confirm password, accept terms and conditions, and click register.\"\n}\n```\n\n**Example 4: Search and Extract**\n```json\n{\n  \"url\": \"https:\u002F\u002Fexample.com\",\n  \"goal\": \"Search for 'laptop' in the search bar, click search, wait for results, then extract the first 5 product names and prices.\"\n}\n```\n\n**Example 5: Data Entry**\n```json\n{\n  \"url\": \"https:\u002F\u002Fexample.com\u002Fadmin\u002Fadd-product\",\n  \"goal\": \"Fill product form with name 'New Product', price '99.99', category 'Electronics', description 'Test product', and click save.\"\n}\n```\n\n### Best Practices for web_automation\n\n1. **Break down complex tasks**\n   - ✅ \"Login, navigate to settings, change email, save\"\n   - ❌ \"Update my account settings\"\n\n2. **Specify exact values**\n   - ✅ \"Fill email field with 'test@example.com'\"\n   - ❌ \"Fill the form with test data\"\n\n3. **Mention button\u002Flink text**\n   - ✅ \"Click the 'Submit' button\"\n   - ❌ \"Submit the form\"\n\n4. **Include expected outcomes**\n   - ✅ \"Click submit and wait for success message\"\n   - ❌ \"Click submit\"\n\n## Response Format\n\n### Success Response\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"items\": [\n      { \"name\": \"Product 1\", \"price\": \"$99\" },\n      { \"name\": \"Product 2\", \"price\": \"$149\" }\n    ]\n  },\n  \"runId\": \"a4732944-3192-4e23-8675-865f908a944c\",\n  \"status\": \"COMPLETED\",\n  \"executionTime\": \"18s\"\n}\n```\n\n### Error Response\n\n```json\n{\n  \"success\": false,\n  \"error\": \"TinyFish API Error: Invalid URL\"\n}\n```\n\n## Common Use Cases\n\n### 1. Price Monitoring Bot\n\nMonitor competitor prices daily:\n\n```python\nimport requests\nimport schedule\n\ndef check_prices():\n    response = requests.post('http:\u002F\u002Flocalhost:8080\u002Ftools\u002Fweb_scrape', json={\n        'url': 'https:\u002F\u002Fcompetitor.com\u002Fproducts',\n        'goal': 'Extract all product names and prices. Return as JSON array.'\n    })\n    \n    result = response.json()\n    if result['success']:\n        # Compare with your prices\n        # Send alert if needed\n        print(f\"Found {len(result['data']['items'])} products\")\n\nschedule.every().day.at(\"09:00\").do(check_prices)\n```\n\n### 2. Lead Generation\n\nExtract contact information from directories:\n\n```python\ndef generate_leads(url):\n    response = requests.post('http:\u002F\u002Flocalhost:8080\u002Ftools\u002Fweb_scrape', json={\n        'url': url,\n        'goal': 'Extract company names, email addresses, phone numbers, and website URLs. Return as JSON array.'\n    })\n    \n    result = response.json()\n    if result['success']:\n        # Save to database\n        # Send to CRM\n        return result['data']\n```\n\n### 3. Content Aggregation\n\nCollect news articles from multiple sources:\n\n```python\nsources = [\n    'https:\u002F\u002Fnews1.com',\n    'https:\u002F\u002Fnews2.com',\n    'https:\u002F\u002Fnews3.com'\n]\n\nall_articles = []\nfor source in sources:\n    response = requests.post('http:\u002F\u002Flocalhost:8080\u002Ftools\u002Fweb_scrape', json={\n        'url': source,\n        'goal': 'Extract top 5 article titles, authors, and URLs. Return as JSON.'\n    })\n    \n    if response.json()['success']:\n        all_articles.extend(response.json()['data']['items'])\n```\n\n### 4. Research Data Collection\n\nExtract paper information from academic sites:\n\n```python\ndef collect_papers(query):\n    url = f\"https:\u002F\u002Fscholar.google.com\u002Fscholar?q={query}\"\n    \n    response = requests.post('http:\u002F\u002Flocalhost:8080\u002Ftools\u002Fweb_scrape', json={\n        'url': url,\n        'goal': 'Extract paper titles, authors, years, and citation counts for the first 10 results.'\n    })\n    \n    return response.json()['data']\n```\n\n### 5. Form Automation\n\nAutomate repetitive form submissions:\n\n```python\ndef submit_application(data):\n    response = requests.post('http:\u002F\u002Flocalhost:8080\u002Ftools\u002Fweb_automation', json={\n        'url': 'https:\u002F\u002Fexample.com\u002Fapply',\n        'goal': f\"Fill application form with name '{data['name']}', email '{data['email']}', phone '{data['phone']}', and submit.\"\n    })\n    \n    return response.json()['success']\n```\n\n## Integration with Bots\n\n### Telegram Bot\n\n```python\nfrom telegram import Update\nfrom telegram.ext import Application, CommandHandler, ContextTypes\nimport requests\n\nasync def scrape_command(update: Update, context: ContextTypes.DEFAULT_TYPE):\n    \"\"\"Usage: \u002Fscrape \u003Curl> \u003Cgoal>\"\"\"\n    if len(context.args) \u003C 2:\n        await update.message.reply_text(\"Usage: \u002Fscrape \u003Curl> \u003Cgoal>\")\n        return\n    \n    url = context.args[0]\n    goal = \" \".join(context.args[1:])\n    \n    await update.message.reply_text(f\"? Scraping {url}...\")\n    \n    response = requests.post('http:\u002F\u002Flocalhost:8080\u002Ftools\u002Fweb_scrape', json={\n        'url': url,\n        'goal': goal\n    })\n    \n    result = response.json()\n    \n    if result['success']:\n        await update.message.reply_text(\n            f\"✅ Completed in {result['executionTime']}\\n\\n\"\n            f\"? Result:\\n{result['data']}\"\n        )\n    else:\n        await update.message.reply_text(f\"❌ Error: {result['error']}\")\n```\n\n### Discord Bot\n\n```python\nimport discord\nfrom discord.ext import commands\nimport requests\n\n@bot.command()\nasync def scrape(ctx, url: str, *, goal: str):\n    \"\"\"Scrape a website using TinyFish\"\"\"\n    await ctx.send(f\"? Scraping {url}...\")\n    \n    response = requests.post('http:\u002F\u002Flocalhost:8080\u002Ftools\u002Fweb_scrape', json={\n        'url': url,\n        'goal': goal\n    })\n    \n    result = response.json()\n    \n    if result['success']:\n        embed = discord.Embed(\n            title=\"✅ Scraping Complete\",\n            description=f\"Execution time: {result['executionTime']}\",\n            color=discord.Color.green()\n        )\n        embed.add_field(\n            name=\"Result\",\n            value=f\"```json\\n{result['data']}\\n```\",\n            inline=False\n        )\n        await ctx.send(embed=embed)\n    else:\n        await ctx.send(f\"❌ Error: {result['error']}\")\n```\n\n## Performance\n\n- **Average execution time:** 15-20 seconds\n- **Success rate:** High (depends on website complexity)\n- **Concurrent requests:** Supported\n- **Rate limiting:** Handled by TinyFish API\n- **Timeout:** Automatic (managed by TinyFish)\n\n## Troubleshooting\n\n### Server not responding\n\n**Check:**\n1. Server is running (`npm start` in tinyfish directory)\n2. Port 8080 is accessible\n3. No firewall blocking\n\n**Solution:**\n```bash\ncd E:\\ZAHRA-WORKSPACE\\mcp-servers\\tinyfish\nnpm start\n```\n\n### Empty or incorrect results\n\n**Check:**\n1. URL is correct and accessible\n2. Goal is specific enough\n3. Website hasn't changed structure\n\n**Solution:**\n- Make goal more specific\n- Include exact field names\n- Test with simpler websites first\n\n### Timeout errors\n\n**Possible causes:**\n- Website is slow to load\n- Complex page with lots of JavaScript\n- Anti-bot protection\n\n**Solution:**\n- TinyFish handles this automatically\n- Wait for completion (15-30 seconds)\n- Try again if first attempt fails\n\n## Advanced Features\n\n### Stealth Mode\n\nFor websites with bot protection, TinyFish automatically uses stealth mode.\n\n### Proxy Support\n\nTinyFish supports geographic routing through proxies (configured in TinyFish dashboard).\n\n### Real-time Streaming\n\nFor long-running tasks, use SSE streaming endpoint (see TinyFish API docs).\n\n## Resources\n\n- **TinyFish Docs:** https:\u002F\u002Fdocs.tinyfish.ai\u002F\n- **TinyFish Discord:** https:\u002F\u002Fdiscord.gg\u002Ftinyfish\n- **Email Support:** support@tinyfish.io\n- **API Dashboard:** https:\u002F\u002Fagent.tinyfish.ai\u002F\n\n## License\n\nMIT License\n\n## Author\n\nZahra AI - AI Chief Digital Officer\n","# TinyFish Web Agent Skill\n\nAI-powered web automation that turns natural language into browser actions.\n\n## When to Use This Skill\n\nUse TinyFish when you need to:\n- **Scrape data** from websites (prices, contacts, articles, etc.)\n- **Automate forms** (filling, submission, multi-step workflows)\n- **Extract structured data** (JSON, tables, lists)\n- **Monitor websites** (price tracking, content changes)\n- **Collect research data** (papers, citations, statistics)\n- **Generate leads** (contact information, company data)\n- **Test web applications** (automated UI testing)\n- **Aggregate content** (news, social media, forums)\n\n## Quick Start\n\n### 1. Start TinyFish MCP Server\n\n```bash\ncd E:\\ZAHRA-WORKSPACE\\mcp-servers\\tinyfish\nnpm start\n```\n\nServer runs on `http:\u002F\u002Flocalhost:8080`\n\n### 2. Use the Tools\n\nTwo tools available:\n- `web_scrape` - Extract data from websites\n- `web_automation` - Automate tasks on websites\n\n## Tool 1: web_scrape\n\nExtract data from any website using natural language.\n\n### Parameters\n\n- `url` (string, required) - Target website URL\n- `goal` (string, required) - Natural language instruction of what to extract\n\n### Examples\n\n**Example 1: Product Price Monitoring**\n```json\n{\n  \"url\": \"https:\u002F\u002Fexample.com\u002Fproducts\",\n  \"goal\": \"Extract all product names, prices, and availability status. Return as JSON array with fields: name, price, inStock.\"\n}\n```\n\n**Example 2: Lead Generation**\n```json\n{\n  \"url\": \"https:\u002F\u002Fcompany-directory.com\",\n  \"goal\": \"Extract company names, email addresses, phone numbers, and website URLs from the first page. Return as structured JSON.\"\n}\n```\n\n**Example 3: News Aggregation**\n```json\n{\n  \"url\": \"https:\u002F\u002Fnews-site.com\",\n  \"goal\": \"Extract the top 10 article titles, authors, publication dates, and article URLs. Return as JSON array.\"\n}\n```\n\n**Example 4: Research Data Collection**\n```json\n{\n  \"url\": \"https:\u002F\u002Fscholar.google.com\u002Fscholar?q=machine+learning\",\n  \"goal\": \"Extract the first 5 paper titles, authors, publication years, and citation counts.\"\n}\n```\n\n**Example 5: E-commerce Comparison**\n```json\n{\n  \"url\": \"https:\u002F\u002Fstore.com\u002Fsearch?q=laptop\",\n  \"goal\": \"Extract product names, prices, ratings, and review counts for the first 10 results. Return as JSON.\"\n}\n```\n\n### Best Practices for web_scrape\n\n1. **Be specific about data fields**\n   - ✅ \"Extract product name, price, and rating\"\n   - ❌ \"Extract product information\"\n\n2. **Specify output format**\n   - ✅ \"Return as JSON array with fields: name, price, inStock\"\n   - ❌ \"Return the data\"\n\n3. **Limit the scope**\n   - ✅ \"Extract the first 10 products\"\n   - ❌ \"Extract all products\" (might timeout)\n\n4. **Include field names**\n   - ✅ \"Extract: title, author, date, url\"\n   - ❌ \"Extract article information\"\n\n## Tool 2: web_automation\n\nAutomate tasks on websites (forms, clicks, workflows).\n\n### Parameters\n\n- `url` (string, required) - Target website URL\n- `goal` (string, required) - Natural language instruction of what to do\n\n### Examples\n\n**Example 1: Form Filling**\n```json\n{\n  \"url\": \"https:\u002F\u002Fexample.com\u002Fcontact\",\n  \"goal\": \"Fill the contact form with name 'John Doe', email 'john@example.com', subject 'Inquiry', message 'Test message', and click the submit button.\"\n}\n```\n\n**Example 2: Login and Extract**\n```json\n{\n  \"url\": \"https:\u002F\u002Fexample.com\u002Flogin\",\n  \"goal\": \"Login with username 'testuser' and password 'testpass', then navigate to the dashboard and extract the account balance.\"\n}\n```\n\n**Example 3: Multi-step Workflow**\n```json\n{\n  \"url\": \"https:\u002F\u002Fexample.com\u002Fsignup\",\n  \"goal\": \"Fill signup form with email 'test@example.com', password 'SecurePass123', confirm password, accept terms and conditions, and click register.\"\n}\n```\n\n**Example 4: Search and Extract**\n```json\n{\n  \"url\": \"https:\u002F\u002Fexample.com\",\n  \"goal\": \"Search for 'laptop' in the search bar, click search, wait for results, then extract the first 5 product names and prices.\"\n}\n```\n\n**Example 5: Data Entry**\n```json\n{\n  \"url\": \"https:\u002F\u002Fexample.com\u002Fadmin\u002Fadd-product\",\n  \"goal\": \"Fill product form with name 'New Product', price '99.99', category 'Electronics', description 'Test product', and click save.\"\n}\n```\n\n### Best Practices for web_automation\n\n1. **Break down complex tasks**\n   - ✅ \"Login, navigate to settings, change email, save\"\n   - ❌ \"Update my account settings\"\n\n2. **Specify exact values**\n   - ✅ \"Fill email field with 'test@example.com'\"\n   - ❌ \"Fill the form with test data\"\n\n3. **Mention button\u002Flink text**\n   - ✅ \"Click the 'Submit' button\"\n   - ❌ \"Submit the form\"\n\n4. **Include expected outcomes**\n   - ✅ \"Click submit and wait for success message\"\n   - ❌ \"Click submit\"\n\n## Response Format\n\n### Success Response\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"items\": [\n      { \"name\": \"Product 1\", \"price\": \"$99\" },\n      { \"name\": \"Product 2\", \"price\": \"$149\" }\n    ]\n  },\n  \"runId\": \"a4732944-3192-4e23-8675-865f908a944c\",\n  \"status\": \"COMPLETED\",\n  \"executionTime\": \"18s\"\n}\n```\n\n### Error Response\n\n```json\n{\n  \"success\": false,\n  \"error\": \"TinyFish API Error: Invalid URL\"\n}\n```\n\n## Common Use Cases\n\n### 1. Price Monitoring Bot\n\nMonitor competitor prices daily:\n\n```python\nimport requests\nimport schedule\n\ndef check_prices():\n    response = requests.post('http:\u002F\u002Flocalhost:8080\u002Ftools\u002Fweb_scrape', json={\n        'url': 'https:\u002F\u002Fcompetitor.com\u002Fproducts',\n        'goal': 'Extract all product names and prices. Return as JSON array.'\n    })\n    \n    result = response.json()\n    if result['success']:\n        # Compare with your prices\n        # Send alert if needed\n        print(f\"Found {len(result['data']['items'])} products\")\n\nschedule.every().day.at(\"09:00\").do(check_prices)\n```\n\n### 2. Lead Generation\n\nExtract contact information from directories:\n\n```python\ndef generate_leads(url):\n    response = requests.post('http:\u002F\u002Flocalhost:8080\u002Ftools\u002Fweb_scrape', json={\n        'url': url,\n        'goal': 'Extract company names, email addresses, phone numbers, and website URLs. Return as JSON array.'\n    })\n    \n    result = response.json()\n    if result['success']:\n        # Save to database\n        # Send to CRM\n        return result['data']\n```\n\n### 3. Content Aggregation\n\nCollect news articles from multiple sources:\n\n```python\nsources = [\n    'https:\u002F\u002Fnews1.com',\n    'https:\u002F\u002Fnews2.com',\n    'https:\u002F\u002Fnews3.com'\n]\n\nall_articles = []\nfor source in sources:\n    response = requests.post('http:\u002F\u002Flocalhost:8080\u002Ftools\u002Fweb_scrape', json={\n        'url': source,\n        'goal': 'Extract top 5 article titles, authors, and URLs. Return as JSON.'\n    })\n    \n    if response.json()['success']:\n        all_articles.extend(response.json()['data']['items'])\n```\n\n### 4. Research Data Collection\n\nExtract paper information from academic sites:\n\n```python\ndef collect_papers(query):\n    url = f\"https:\u002F\u002Fscholar.google.com\u002Fscholar?q={query}\"\n    \n    response = requests.post('http:\u002F\u002Flocalhost:8080\u002Ftools\u002Fweb_scrape', json={\n        'url': url,\n        'goal': 'Extract paper titles, authors, years, and citation counts for the first 10 results.'\n    })\n    \n    return response.json()['data']\n```\n\n### 5. Form Automation\n\nAutomate repetitive form submissions:\n\n```python\ndef submit_application(data):\n    response = requests.post('http:\u002F\u002Flocalhost:8080\u002Ftools\u002Fweb_automation', json={\n        'url': 'https:\u002F\u002Fexample.com\u002Fapply',\n        'goal': f\"Fill application form with name '{data['name']}', email '{data['email']}', phone '{data['phone']}', and submit.\"\n    })\n    \n    return response.json()['success']\n```\n\n## Integration with Bots\n\n### Telegram Bot\n\n```python\nfrom telegram import Update\nfrom telegram.ext import Application, CommandHandler, ContextTypes\nimport requests\n\nasync def scrape_command(update: Update, context: ContextTypes.DEFAULT_TYPE):\n    \"\"\"Usage: \u002Fscrape \u003Curl> \u003Cgoal>\"\"\"\n    if len(context.args) \u003C 2:\n        await update.message.reply_text(\"Usage: \u002Fscrape \u003Curl> \u003Cgoal>\")\n        return\n    \n    url = context.args[0]\n    goal = \" \".join(context.args[1:])\n    \n    await update.message.reply_text(f\"? Scraping {url}...\")\n    \n    response = requests.post('http:\u002F\u002Flocalhost:8080\u002Ftools\u002Fweb_scrape', json={\n        'url': url,\n        'goal': goal\n    })\n    \n    result = response.json()\n    \n    if result['success']:\n        await update.message.reply_text(\n            f\"✅ Completed in {result['executionTime']}\\n\\n\"\n            f\"? Result:\\n{result['data']}\"\n        )\n    else:\n        await update.message.reply_text(f\"❌ Error: {result['error']}\")\n```\n\n### Discord Bot\n\n```python\nimport discord\nfrom discord.ext import commands\nimport requests\n\n@bot.command()\nasync def scrape(ctx, url: str, *, goal: str):\n    \"\"\"Scrape a website using TinyFish\"\"\"\n    await ctx.send(f\"? Scraping {url}...\")\n    \n    response = requests.post('http:\u002F\u002Flocalhost:8080\u002Ftools\u002Fweb_scrape', json={\n        'url': url,\n        'goal': goal\n    })\n    \n    result = response.json()\n    \n    if result['success']:\n        embed = discord.Embed(\n            title=\"✅ Scraping Complete\",\n            description=f\"Execution time: {result['executionTime']}\",\n            color=discord.Color.green()\n        )\n        embed.add_field(\n            name=\"Result\",\n            value=f\"```json\\n{result['data']}\\n```\",\n            inline=False\n        )\n        await ctx.send(embed=embed)\n    else:\n        await ctx.send(f\"❌ Error: {result['error']}\")\n```\n\n## Performance\n\n- **Average execution time:** 15-20 seconds\n- **Success rate:** High (depends on website complexity)\n- **Concurrent requests:** Supported\n- **Rate limiting:** Handled by TinyFish API\n- **Timeout:** Automatic (managed by TinyFish)\n\n## Troubleshooting\n\n### Server not responding\n\n**Check:**\n1. Server is running (`npm start` in tinyfish directory)\n2. Port 8080 is accessible\n3. No firewall blocking\n\n**Solution:**\n```bash\ncd E:\\ZAHRA-WORKSPACE\\mcp-servers\\tinyfish\nnpm start\n```\n\n### Empty or incorrect results\n\n**Check:**\n1. URL is correct and accessible\n2. Goal is specific enough\n3. Website hasn't changed structure\n\n**Solution:**\n- Make goal more specific\n- Include exact field names\n- Test with simpler websites first\n\n### Timeout errors\n\n**Possible causes:**\n- Website is slow to load\n- Complex page with lots of JavaScript\n- Anti-bot protection\n\n**Solution:**\n- TinyFish handles this automatically\n- Wait for completion (15-30 seconds)\n- Try again if first attempt fails\n\n## Advanced Features\n\n### Stealth Mode\n\nFor websites with bot protection, TinyFish automatically uses stealth mode.\n\n### Proxy Support\n\nTinyFish supports geographic routing through proxies (configured in TinyFish dashboard).\n\n### Real-time Streaming\n\nFor long-running tasks, use SSE streaming endpoint (see TinyFish API docs).\n\n## Resources\n\n- **TinyFish Docs:** https:\u002F\u002Fdocs.tinyfish.ai\u002F\n- **TinyFish Discord:** https:\u002F\u002Fdiscord.gg\u002Ftinyfish\n- **Email Support:** support@tinyfish.io\n- **API Dashboard:** https:\u002F\u002Fagent.tinyfish.ai\u002F\n\n## License\n\nMIT License\n\n## Author\n\nZahra AI - AI Chief Digital Officer\n",{"name":5,"license":14,"description":7},"main","000d804ba753926ec0eca35be68bdb42da72c672","skills\u002F05-CUSTOM-SKILLS\u002Ftinyfish","https:\u002F\u002Fgithub.com\u002Fsigitpoerwo\u002Frepoworkspace_zahra","https:\u002F\u002Fgithub.com\u002Fsigitpoerwo","2026-04-05 09:27:05",{"source":8,"skillName":5,"commands":54,"prompt":64,"zipAvailable":65},[55,58,61],{"tool":56,"command":57},"npx","npx skills add sigitpoerwo\u002Frepoworkspace_zahra --skill tinyfish",{"tool":59,"command":60},"bunx","bunx skills add sigitpoerwo\u002Frepoworkspace_zahra --skill tinyfish",{"tool":62,"command":63},"pnpm","pnpm dlx skills add sigitpoerwo\u002Frepoworkspace_zahra --skill tinyfish","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsigitpoerwo\u002Frepoworkspace_zahra\u002Fblob\u002Fmain\u002Fskills\u002F05-CUSTOM-SKILLS\u002Ftinyfish\u002FSKILL.md",true,[67,73],{"path":68,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":71,"sourceHtmlUrl":72},"examples.md","REFERENCE","参考文档",12853,"https:\u002F\u002Fgithub.com\u002Fsigitpoerwo\u002Frepoworkspace_zahra\u002Fblob\u002Fmain\u002Fskills\u002F05-CUSTOM-SKILLS\u002Ftinyfish\u002Fexamples.md",{"path":74,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":75,"sourceHtmlUrl":76},"README.md",1830,"https:\u002F\u002Fgithub.com\u002Fsigitpoerwo\u002Frepoworkspace_zahra\u002Fblob\u002Fmain\u002Fskills\u002F05-CUSTOM-SKILLS\u002Ftinyfish\u002FREADME.md",[78,116,134,145,151,176],{"skillNo":79,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":96,"publishedAt":42},"01M6K0FJ41XMDT72PK0E3ZJF9P","zahra-workspace-manager","Comprehensive workspace management skill for Zahra Maurita's development environment. Use when managing projects across 8 divisions (Web, App, AI Agent, Bot, Content, Marketing, Research, Business), organizing files, tracking progress, managing memory, or coordinating multi-domain work. Triggers on mentions of workspace organization, project management, division-specific tasks, memory updates, or cross-domain coordination.","https:\u002F\u002Fgithub.com\u002Fsigitpoerwo\u002Frepoworkspace_zahra\u002Fblob\u002Fmain\u002Fskills\u002Fzahra-workspace-manager\u002FSKILL.md",[84,87,90,91],{"categoryNo":85,"categoryName":86,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000019","营销推广",{"categoryNo":88,"categoryName":89,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000021","资料检索与研究",{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":92,"categoryName":93,"taxonomyType":94,"taxonomyTypeDesc":95},"01JBSEEDCAT000000000000035","市场营销","PROFESSION","适用职业",[97,98,99,100,32,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115],"zahra workspace manager","workspace","workspace manager","manager","memory","ai agent","tasks","search","projects","coordination","work","command","files","multi-domain","across","project","app","progress","updates",{"skillNo":117,"name":118,"nameZh":6,"description":119,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":123,"publishedAt":42},"01M6K0F57WDT62QNXTTC6YS34D","tinyfish-openclaw","TinyFish Web Agent integration for OpenClaw. Use this skill to scrape websites, automate web tasks, extract structured data, and perform browser automation using natural language. Works seamlessly with OpenClaw's MCP protocol.","https:\u002F\u002Fgithub.com\u002Fsigitpoerwo\u002Frepoworkspace_zahra\u002Fblob\u002Fmain\u002Fskills\u002F05-CUSTOM-SKILLS\u002Ftinyfish-openclaw\u002FSKILL.md",[122],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[124,125,5,29,33,35,25,36,37,126,127,128,129,130,131,41,39,103,132,133],"tinyfish openclaw","openclaw","structured data","for","integration","mcp protocol","MCP","browser automation","protocol","browser",{"skillNo":135,"name":136,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":144,"publishedAt":42},"01M6K0E9ZWFTG44SK6G2ARS39Z","autoresearchclaw","https:\u002F\u002Fgithub.com\u002Fsigitpoerwo\u002Frepoworkspace_zahra\u002Fblob\u002Fmain\u002Fskills\u002F05-CUSTOM-SKILLS\u002Fautoresearchclaw\u002FSKILL.md",[139,142,143],{"categoryNo":140,"categoryName":141,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":88,"categoryName":89,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[136],{"skillNo":146,"name":147,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":148,"categories":149,"keywords":150,"publishedAt":42},"01M6K0E6ZAEJFYDXM4GANCKZY0","researchclaw","https:\u002F\u002Fgithub.com\u002Fsigitpoerwo\u002Frepoworkspace_zahra\u002Fblob\u002Fmain\u002Fskills\u002F05-CUSTOM-SKILLS\u002Fautoresearchclaw\u002F.claude\u002Fskills\u002Fresearchclaw\u002FSKILL.md",[],[147],{"skillNo":152,"name":153,"nameZh":6,"description":154,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":155,"categories":156,"keywords":158,"publishedAt":42},"01M6K0E1B6RZ8T2S7RMWQ6BVWW","academic-research-assistant","Research assistant for management & digital business academics - literature review, paper analysis, citation management, research methodology","https:\u002F\u002Fgithub.com\u002Fsigitpoerwo\u002Frepoworkspace_zahra\u002Fblob\u002Fmain\u002Fskills\u002F05-CUSTOM-SKILLS\u002Facademic-research-assistant\u002FSKILL.md",[157],{"categoryNo":88,"categoryName":89,"taxonomyType":20,"taxonomyTypeDesc":21},[159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,127],"Academic","research assistant","academic research assistant","research","assistant","business","review","methodology","citation management","analysis","literature review","management","research methodology","paper analysis","Citation","paper","literature",{"skillNo":177,"name":178,"nameZh":6,"description":179,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":180,"categories":181,"keywords":182,"publishedAt":42},"01M6K0DX0JY6FXJWK0HT5PA277","zig-system-calls","Guides using bun.sys for system calls and file I\u002FO in Zig. Use when implementing file operations instead of std.fs or std.posix.","https:\u002F\u002Fgithub.com\u002Fsigitpoerwo\u002Frepoworkspace_zahra\u002Fblob\u002Fmain\u002Fskills\u002F03-BELUM-DICOBA\u002Fdari-clawhub\u002Fzig-system-calls\u002FSKILL.md",[],[183,184,185,186,187,188,189,33,190,191,192,193,127,194],"zig system calls","calls","zig","system","fs","file operations","operations","bun","guides","posix","implementing","file"]