The issue is you're not looping through the array returned. Before I show you how to do this with wp_get_post_terms, have you tried using the get_terms function? I believe this may be a better approach for you:
$terms = get_terms('chapters');
echo '<ul>';
foreach ($terms as $term) {
echo '<li><a href="'.get_term_link($term->slug, 'species').'">'.$term->name.'</a></li>';
}
echo '</ul>';
Source: http://codex.wordpress.org/Function_Reference/get_terms
...
If that doesn't work for you check out how you can use wp_get_post_terms to do pretty much the same thing:
echo "<ul>";
$terms = wp_get_post_terms( $post->ID, 'chapters');
foreach($terms as $term) {
echo "<li><a href='".get_term_link($term)."' title='".$term->name."'>".$term->name."</a></li>";
}
echo "</ul>";
http://codex.wordpress.org/Function_Reference/wp_get_post_terms
I hope this helps you out! Let me know if there's any issue with either code example above.