hello-qm/catgo-lrg/adsorption

Claude Code and agent skill by hello-qm/catgo-lrg

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Use when the user asks for adsorption energy, binding energy, or wants to compare how strongly a molecule binds to a surface.

Install

npx vskill@latest install hello-qm/catgo-lrg/adsorption

SKILL.md

Adsorption Energy Calculation

Theory

E_ads = E(slab+adsorbate) - E(slab) - E(adsorbate_gas)
  • E_ads < 0: exothermic adsorption (favorable)
  • E_ads > 0: endothermic (unfavorable)
With ZPE Correction
dG_ads = G(slab+adsorbate) - G(slab) - G(adsorbate_gas)

Where G includes DFT energy + ZPE - TS from Gibbs free energy calculation.

Three Required Calculations

SystemDescriptionNotes
slab+adsorbateAdsorbate on surfacegeo_opt with fixed bottom layers
clean slabSame slab without adsorbategeo_opt with same settings
adsorbate gasIsolated molecule in boxgeo_opt in large vacuum box (15+ A)

All three MUST use identical computational settings (ENCUT, EDIFF, k-points for slab systems; Gamma-only for gas molecule).

MCP Workflow

Step 1: Create workflow
json
{"tool": "catgo_workflow_engine", "arguments": {
"action": "create", "name": "CO adsorption on Pt(111)"
}}
Step 2: Build and optimize clean slab
json
{"tool": "catgo_fetch", "arguments": {
"action": "crystal", "formula": "Pt", "source": "mp"
}}
json
{"tool": "catgo_structure", "arguments": {
"action": "slab", "miller_index": [1,1,1],
"min_slab_size": 12.0, "min_vacuum_size": 15.0
}}
json
{"tool": "catgo_workflow_engine", "arguments": {
"action": "add_task", "workflow_id": "wf_ads",
"task_type": "geo_opt",
"params": {"software": "vasp", "ENCUT": 520, "system_name": "clean_slab"}
}}
Step 3: Build and optimize slab + adsorbate
json
{"tool": "catgo_structure", "arguments": {
"action": "add_atom", "element": "C", "position": [2.77, 1.60, 14.0]
}}
json
{"tool": "catgo_structure", "arguments": {
"action": "add_atom", "element": "O", "position": [2.77, 1.60, 15.16]
}}
json
{"tool": "catgo_workflow_engine", "arguments": {
"action": "add_task", "workflow_id": "wf_ads",
"task_type": "geo_opt",
"params": {"software": "vasp", "ENCUT": 520, "system_name": "slab+CO"}
}}
Step 4: Gas-phase adsorbate
json
{"tool": "catgo_fetch", "arguments": {
"action": "molecule", "name": "carbon monoxide"
}}
json
{"tool": "catgo_workflow_engine", "arguments": {
"action": "add_task", "workflow_id": "wf_ads",
"task_type": "geo_opt",
"params": {"software": "vasp", "ENCUT": 520, "ISMEAR": 0,
"KPOINTS": [1,1,1], "system_name": "CO_gas"}
}}
Step 5: Submit
json
{"tool": "catgo_workflow_engine", "arguments": {
"action": "submit", "workflow_id": "wf_ads"
}}

Python API

python
from catgo.workflow import Workflow
wf = Workflow("CO adsorption on Pt(111)")
# Clean slab
slab_inp = wf.add_task("structure_input", structure=clean_slab_json)
slab_opt = wf.add_task("geo_opt", structure=slab_inp.output.structure,
software="vasp", ENCUT=520)
# Slab + CO
ads_inp = wf.add_task("structure_input", structure=slab_co_json)
ads_opt = wf.add_task("geo_opt", structure=ads_inp.output.structure,
software="vasp", ENCUT=520)
# Gas-phase CO (Gamma-only, no smearing)
co_inp = wf.add_task("structure_input", structure=co_gas_json)
co_opt = wf.add_task("geo_opt", structure=co_inp.output.structure,
software="vasp", ENCUT=520, ISMEAR=0,
KPOINTS=[1, 1, 1])
wf.submit()
# After completion:
# E_ads = ads_opt.output.energy - slab_opt.output.energy - co_opt.output.energy
With ZPE Correction
python
# Add freq + gibbs for each branch
for task_opt, name, phase in [
(ads_opt, "slab+CO", "adsorbed"),
(co_opt, "CO_gas", "gas"),
]:
frq = wf.add_task("freq", structure=task_opt.output.structure,
software="vasp",
freeze_mode="layers" if phase == "adsorbed" else "none",
freeze_layers=4 if phase == "adsorbed" else 0)
gib = wf.add_task("gibbs_energy", energy=task_opt.output.energy,
frequencies=frq.output.frequencies, phase=phase)

DAG Structure

clean_slab --> geo_opt ----\
slab+adsorbate --> geo_opt ----+--> E_ads = E2 - E1 - E3
adsorbate_gas --> geo_opt ----/

Three independent branches, minimum 3 tasks.

Comparing Multiple Sites

To compare adsorption at different sites (top, bridge, hollow):

python
sites = {
"top": [2.77, 1.60, 14.0],
"bridge": [1.39, 2.40, 13.8],
"hollow": [1.39, 0.80, 13.6],
}
for site_name, pos in sites.items():
inp = wf.add_task("structure_input", structure=make_ads_slab(pos))
opt = wf.add_task("geo_opt", structure=inp.output.structure,
software="vasp", ENCUT=520,
system_name=f"CO_{site_name}")

Common Pitfalls

  1. The gas-phase molecule must be in a large box (15+ A vacuum on all sides)

with Gamma-only k-points and Gaussian smearing (ISMEAR=0).

  1. For dissociative adsorption (e.g., O2 --> 2 *O), use the appropriate

reference: 0.5 * E(O2_gas), not E(O_atom).

  1. BSSE (basis set superposition error) is usually negligible for planewave

DFT but can matter for localized basis sets (CP2K GTH).

  1. If comparing different adsorbates, always use the SAME clean slab

calculation as reference -- do not re-optimize the clean slab for each.

  1. Check that the adsorbate did not desorb or migrate to a different site

during geo_opt by inspecting the final structure.

Security

  • Security scanPassed, 95 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
199
Repository forks
23
7-day trend score
26

Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 14 Sep 2026, a month ago.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/hello-qm/catgo-lrg/adsorption/badge)](https://verified-skill.com/skills/hello-qm/catgo-lrg/adsorption)

Something wrong with this skill or its page? Tell us.