# Python Client

Async Python SDK for skill discovery

# [Python Client](/content/docs/python-client#python-client/index.html)

Not everything runs on Node. The `skillkit-client` package gives Python apps the same skill discovery capabilities as the REST API — async, typed, and ready to go.

## [Install](/content/docs/python-client#install/index.html)

```
pip install skillkit-client
```

Requires Python 3.10+.

## [Quick start](/content/docs/python-client#quick-start/index.html)

```
from skillkit import SkillKitClient

async with SkillKitClient() as client:
    results = await client.search("react performance", limit=5)
    for skill in results.skills:
        print(f"{skill.name}: {skill.description}")
```

The client connects to `http://localhost:3737` by default. Make sure the API server is running:

```
skillkit serve
```

## [Search with filters](/content/docs/python-client#search-with-filters/index.html)

```
results = await client.search_with_filters(
    "authentication",
    tags=["security"],
    category="backend",
    limit=10,
)
```

## [Get a specific skill](/content/docs/python-client#get-a-specific-skill/index.html)

```
skill = await client.get_skill("anthropics/skills", "pdf-processing")
print(skill.name, skill.description, skill.tags)
```

## [Trending and categories](/content/docs/python-client#trending-and-categories/index.html)

```
trending = await client.trending(limit=10)
categories = await client.categories()

for skill in trending:
    print(f"{skill.name} ({skill.source})")

for cat in categories:
    print(f"{cat.name}: {cat.count} skills")
```

## [Health and cache](/content/docs/python-client#health-and-cache/index.html)

```
health = await client.health()
print(f"v{health.version} — {health.skill_count} skills loaded")

stats = await client.cache_stats()
print(f"Cache hit rate: {stats.hit_rate:.0%}")
```

## [Connect to a remote server](/content/docs/python-client#connect-to-a-remote-server/index.html)

```
async with SkillKitClient("https://my-server.example.com:3737") as client:
    results = await client.search("deployment")
```

## [Models](/content/docs/python-client#models/index.html)

The client returns typed dataclasses:

```
Skill(name, source, description, tags, category, content, score)
SearchResponse(skills, total, query, limit)
HealthResponse(status, version, skill_count, uptime)
Category(name, count)
CacheStats(hits, misses, size, max_size, hit_rate)
```

All fields except `name` and `source` on `Skill` are optional — they depend on what the server returns and whether you requested `include_content`.

## [Prerequisites](/content/docs/python-client#prerequisites/index.html)

The Python client talks to the SkillKit REST API. You need a running server:

```
skillkit serve
```

Then run your Python script in another terminal. The client handles connection management, retries, and cleanup automatically when used with `async with`.
